gpt4 book ai didi

java - 使用相同的actionListener为网格上的每个按钮打开单独的GUI

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:19 25 4
gpt4 key购买 nike

我有一个循环,可以制作 3x3 的按钮网格。我试图做到这一点,以便当按下按钮时,会打开一个窗口,供用户添加有关按钮的数据。窗口打开,一切都第一次正常运行。一旦我保存这个窗口并单击一个新按钮,就会有一个白色方 block (可能是面板)覆盖所有内容。如果我将窗口放大,我可以看到其后面的文本字段,但白色方 block 保持相同的大小(未展开窗口的大小)。扩展窗口后,我发现为最后一个按钮添加的数据仍然存在于"new"窗口中,让我知道我可能正在打开同一个窗口,并且没有创建新窗口。有没有办法每次都创建一个全新的窗口?

这是创建按钮的循环

    for (int i = 0; i < addButtons3.length; i++) {
addButtons3[i] = new JButton(" Add Bed "); // make text big
addButtons3[i].addActionListener(new RoomListener());
addButtons3[i].setActionCommand("" + i);
gbc.fill = GridBagConstraints.BOTH;
room3Panel.add(addButtons3[i]);
}

这是每个按钮的actionListener

class  RoomListener implements ActionListener{
public void actionPerformed(ActionEvent event){
AbstractButton btn = (AbstractButton) event.getSource();
source = event.getActionCommand();
System.out.println(source);
x = Integer.parseInt(source);
y = Integer.parseInt(roomSource);
btn.setText("Adding bed..");

intFrame8.setMaximizable(true); //Add maximize
intFrame8.setIconifiable(true); //Make it configurable
intFrame8.setResizable(true); //Make it resizable
intFrame8.setClosable(true); //How will it react on close?
intFrame8.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //Like this
intFrame8.setSize(320,240);
desktopPane.add(intFrame8);

JPanel addRoomPanel = new JPanel();
addRoomPanel.setLayout(new GridLayout(7,1,5,5)); //row/col/rspace/cspace
addRoomPanel.setBackground(Color.white);
intFrame8.getContentPane().add(addRoomPanel);
intFrame8.toFront();

//Name text field
nameLabel.setText("Name: ");
name.addActionListener(new nameListener());
addRoomPanel.add(nameLabel);
addRoomPanel.add(name);

//DoB text field
dobLabel.setText("Date of Birth: ");
dob.addActionListener(new dobListener());
addRoomPanel.add(dobLabel);
addRoomPanel.add(dob);

//Passport Number text field
passNum.addActionListener(new passNumListener());
addRoomPanel.add(passNumLabel);
addRoomPanel.add(passNum);

//Start Date text field
startDate.addActionListener(new startDateListener());
addRoomPanel.add(startDateLabel);
addRoomPanel.add(startDate);

//End Date text field
endDate.addActionListener(new endDateListener());
addRoomPanel.add(endDateLabel);
addRoomPanel.add(endDate);

//Comments section text field
comments.addActionListener(new commentsListener());
addRoomPanel.add(commentsLabel);
addRoomPanel.add(comments);

addBedSave.addActionListener(new bedSaveListener());
addRoomPanel.add(addBedSave);

intFrame8.setVisible(true);
}
}

这是关闭窗口的“保存”按钮的actionListener

class bedSaveListener implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println(nameTemp);
nameList[x][y] = nameTemp;
dobList[x][y] = dobTemp;
startDateList[x][y] = startDateTemp;
endDateList[x][y] = endDateTemp;
passNumList[x][y] = passNumTemp;
commentsList[x][y] = commentsTemp;
intFrame8.dispose();

switch(y){
case 0:
intFrame4.toFront();
addButtons1[x].setText(nameTemp);
break;
case 1:
intFrame5.toFront();
addButtons2[x].setText(nameTemp);
break;
case 2:
intFrame6.toFront();
addButtons3[x].setText(nameTemp);
break;
case 3:
intFrame7.toFront();
addButtons4[x].setText(nameTemp);
break;
}
}
}

最佳答案

建议:为您的 ActionListener 使用 if(e.getSource == some_JButton){//code}

关于java - 使用相同的actionListener为网格上的每个按钮打开单独的GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31373830/

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