Я попытался понять это сам, но не могу. Я застрял в странной проблеме.
У меня есть Java-программа с несколькими классами и формами (я использую Intellij и сборку в GUI-Creator). Когда я переключаюсь с одного экрана на другой, я просто вызываю frame.setVisible(false);
в frame.setVisible(true);
окне и frame.setVisible(true);
в окне я хочу показать следующее.
На кнопке Click Я делаю это:
В классе 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);
}
И поэтому он пытается обновить старый фрейм из класса 2, который больше не существует из-за нового, который я только что создал. Итак, у меня есть 2 кадра: один, как я хочу, и один странный старый фрейм с классом2.
Моя проблема в том, что я хочу связать свой JComboBox с новым фреймом и обновить его, но он все еще связан со старым, и это вызывает такие странные проблемы, как возврат к функции. Я имею в виду, что она находится на последней строке goToMainWindow()
а затем она начинается с первой строки.
Например
// 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 на дисплее, который отображается, вызывая его собственный метод для очистки собственной модели combobox.