Я создал систему, в которой я перечисляю различные места на поезде в GUI. Я решил использовать простой макет сетки с пронумерованными JButtons, представляющими сидения, а seatNo и пустые JLabels для представления пустого пространства (я понимаю, что это может быть тривиально, но это было просто). Я использовал Gridlayout, и я создал кнопки и ярлыки, как показано ниже.Индивидуальные идентификаторы JButtons в GridLayout
У меня есть список (compArray2) в отдельном классе, который состоит из 0s и 1s и направления, которые представляют собой место, где должно быть место и где не должно быть места. значение .getNum получает значение либо 0 для пустого пространства, либо 1 для места, а .getDir получает направление, в котором будет стоять сиденье.
public JPanel rowPanelCreation(int type, int rowNo, int width){
theNoOfSeats=0;
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0,width));
List<seatLayout> layout = new ArrayList<>();
layout = ModelConstants.compArray2;
for (seatLayout isit : x2){
buttonEna = new JButton();
buttonEna.setFont(new Font("Sans Serif", Font.BOLD , 14));
buttonEna.setBorderPainted(false);
buttonDis = new JLabel();
if (isit.getNum()==0){
if (isit.getDir()=='x'){
panel.add(buttonDis);
}
}
else if (isit.getNum()==1){
theNoOfSeats++;
if (isit.getDir()=='N'){
image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultN.png");
buttonEna.setIcon(image);
buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats)));
buttonEna.setHorizontalTextPosition(JButton.CENTER);
buttonEna.setVerticalTextPosition(JButton.CENTER);
panel.add(buttonEna);
}
else if (isit.getDir()=='E'){
image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultE.png");
buttonEna.setIcon(image);
buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats)));
buttonEna.setHorizontalTextPosition(JButton.CENTER);
buttonEna.setVerticalTextPosition(JButton.CENTER);
buttonEna.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){JOptionPane.showMessageDialog(null,"You have chosen : ");}});
panel.add(buttonEna);
}
else if (isit.getDir()=='S'){
image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultS.png");
buttonEna.setIcon(image);
buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats)));
buttonEna.setHorizontalTextPosition(JButton.CENTER);
buttonEna.setVerticalTextPosition(JButton.CENTER);
panel.add(buttonEna);
}
else if (isit.getDir()=='W'){
image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultW.png");
buttonEna.setIcon(image);
buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats)));
buttonEna.setHorizontalTextPosition(JButton.CENTER);
buttonEna.setVerticalTextPosition(JButton.CENTER);
panel.add(buttonEna);
}
}
}
return panel;
}
главная проблема, которую я имею что когда я нажимаю на одну из кнопок сиденья я хочу сообщение появляться говорить мне seatNo сиденья я выбрал это. Однако, когда я это делаю, он просто отображает последнее местоNo. Есть ли лучший способ сделать это? Я предполагаю, что, поскольку все кнопки в принципе одинаковы, нет возможности различать их?
Весь этот код создает кнопки. Если у вас возникли проблемы с некоторыми действиями, не было бы уместным показывать ваш «actionPerformed»? Или это, где вы думаете, что ошибка происходит? –
@peeskillet теперь работает, спасибо за вашу помощь. – Tomousee