gpt4 book ai didi

java - JComboBox 在removeAllItems() 时引用旧框架

转载 作者:行者123 更新时间:2023-11-30 03:38:46 25 4
gpt4 key购买 nike

我试图自己解决这个问题,但我做不到。我遇到了一个奇怪的问题。

我有一个包含多个类和表单的 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 绑定(bind)到一个新框架并更新它,但它仍然连接到旧框架,这会导致奇怪的问题,例如在函数中跳回。我的意思是它位于 goToMainWindow() 的最后一行,然后又从第一行开始。

最佳答案

  1. 首先,您应该避免像程序那样交换 JFrame,因为这是一个非常烦人的 GUI 设计。请阅读The Use of Multiple JFrames, Good/Bad Practice?了解更多相关信息。
  2. 接下来,我们不可能知道您的 JComboBox 与哪个 GUI View 关联。
  3. 不过话说回来,这确实不重要。我不会做您正在做的事情,而是为包含 JCombBox 的显示类提供一个公共(public)方法,您可以在包含的显示类上调用该方法,该方法会清除所包含的 JComboBox 的模型或将项目放入模型中。这样,您所引用的 JComboBox 就不会存在歧义,并且可以避免直接公开 View 的内部组件。
  4. 顺便说一句,我尝试将我的显示或 View 类调整为创建 JPanel,而不是 JFrame,因为这将为我的代码提供更大的灵 active 。
<小时/>

例如

// 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 类相同。然后,您可以在正确的 View /显示所持有的 JComboBox 上调用正确的方法。

这样,当您交换显示时,也许通过使用 CardLayout,您可以通过调用其自己的方法清除其自己的组合框模型来清除正在显示的显示中的 JComboBox。

关于java - JComboBox 在removeAllItems() 时引用旧框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234486/

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