我试图自己解决这个问题,但我不能。我遇到了一个奇怪的问题。
我有一个包含多个类和表单的Java程序(我使用Intellij和GUI-Creator中的构建)。当我从一个屏幕切换到另一个屏幕时,我只需在翻转窗口调用frame.setVisible(false);
,然后在我想要显示的窗口调用frame.setVisible(true);
。
在按钮上单击我这样做:
在第1课:
if (e.getSource() == umschaltenButton) {
this.mainW.goToMainWindow();
logger.log(Level.INFO, "Switched Back to MainMenu");
frame.setVisible(false);
}
这是奇怪的部分。
在第2课:
public void goToMainWindow() {
frame = tvElectronics.drawMainWindow(); // I get a new Frame with new Images and so on
frame.addMouseListener(al);
frame.add(BotomPanel); // in here is the JComboBox
frame.setSize(LENGTH, HEIGHT);
comboBox1.removeAllItems(); // Here it tryes to refere to the old frame before i made frame = tvElectronics.drawMainWindow();
Vector<String[]> content = tvElectronics.getContent();
for (int i = 0; i < tvElectronics.getAnz(); ++i) {
comboBox1.addItem((i + 1) + ". " + content.get(i)[3]);
}
comboBox1.setSelectedIndex(chanel);
frame.setVisible(true);
}
因此它尝试更新class2中的旧框架,因为我刚创建的旧框架不再存在。所以我打开了2个框架:一个是我想要的,一个奇怪的旧框架形成class2。
我的问题是我希望将我的JComboBox绑定到一个新的框架并更新它但它仍然连接到旧框架,这会导致奇怪的问题,比如跳回到函数中。我的意思是它位于goToMainWindow()
的最后一行,然后它再次从第一行开始。
答案 0 :(得分:2)
例如
// my display class
class Display1 {
private DefaultComboBoxModel<String> myModel = new DefaultComboBoxModel<>();
private JComboBox<String> myCombo = new JComboBox<>(myModel);
public void removeAllComboElements() {
myModel.removeAllElements();
}
public void addElement(String ele) {
myModel.addElement(ele);
}
}
您的Display2课程相同。然后,您可以在正确的视图/显示所持有的JComboBox上调用正确的方法。
这样,当您交换显示时,可能通过使用CardLayout,您可以通过调用自己的方法来清除显示的JComboBox,以清除其自己的组合框模型。