gpt4 book ai didi

java - 单独识别 GridLayout 中的 JButton

转载 作者:行者123 更新时间:2023-12-01 23:18:03 25 4
gpt4 key购买 nike

我一直在创建一个系统,通过该系统我可以在 GUI 中列出火车上的各个座位。我决定使用一个简单的网格布局,其中编号的 JButton 代表座位,而 SeatNo 和空的 JLabels 代表空白空间(我意识到这可能很琐碎,但很简单)。我使用了 Gridlayout,并创建了按钮和标签,如下所示。

我在一个单独的类中有一个列表 (compArray2),它由 0 和 1 以及一个方向组成,该方向表示哪里应该有座位,哪里不应该有座位。 .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 是。然而,当我这样做时,它只是显示最后一个座位号。我有更好的方法可以做到这一点吗?我假设由于所有按钮基本上都是相同的,因此无法区分它们?

最佳答案

"I want a message to appear telling me the seatNo of the seat I have selected is. However when I do this it simply displays the very last seatNo."

这就是你的问题。这是一个引用问题。最后,所有按钮都将具有相同的 JButtonJLabel 引用。因此,所有按钮和标签都将获得创建的最后按钮和标签引用,因此“显示最后一个座位号。”

buttonEna = new JButton();
buttonEna.setFont(new Font("Sans Serif", Font.BOLD , 14));
buttonEna.setBorderPainted(false);
buttonDis = new JLabel();

您需要在每次迭代中创建一个新的 JButton 和新的 JLabel 引用

JBUtton buttonEna = new JButton();
buttonEna.setFont(new Font("Sans Serif", Font.BOLD , 14));
buttonEna.setBorderPainted(false);
JLabel buttonDis = new JLabel();
<小时/>

另一种方法是使用 JButton 数组,循环设置按钮,并将它们添加到 Panel 中。假设您有一个 GridLayout(2, 2)。然后,您将需要一个由 4 个 JButton 组成的数组

JButton[] buttons = new JButton[9];
...
for (int i = 0; i < 4; i++){
buttons[i] = new JButton();
buttons[i].setFont(new Font("Sans Serif", Font.BOLD , 14));
buttonEna.setBorderPainted(false);
// set other properties for button
panel.add(buttons[i]);
}

关于java - 单独识别 GridLayout 中的 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com