gpt4 book ai didi

java - 使用 JComboBox 在 JDialog 中更新 JPanel 时出现问题

转载 作者:行者123 更新时间:2023-11-30 07:32:03 27 4
gpt4 key购买 nike

我创建了一个 JDialog,其中包含一个 JComboBox 和一个面板,该面板下方应根据在 JComboBox 中选择的值显示不同的内容。我创建了一个 JPanel (panel_1),它被添加到对话框的内容 Pane 中,并为 JComboBox 中的每个可能项目创建了一个额外的 JPanel(例如,如果它只有 2 个项目,则为 panel_item_1 和 panel_item_2)。我在 JComboBox 中附加了以下监听器类:

public class SelectedListener implements ActionListener {

private SettingsDialog dialog;

public SelectedListener(SettingsDialog dialog){

this.dialog = dialog;

}

public void actionPerformed(ActionEvent e) {

JComboBox cb = (JComboBox)e.getSource();
String selected_settings = (String)cb.getSelectedItem();

if(selected_settings.compareTo("Option 1") == 0){

dialog.panel_1 = dialog.panel_item_1;
dialog.panel_1.updateUI();

}else if(selected_settings.compareTo("Option 2") == 0 ){

dialog.panel_1 = dialog.panel_item_2;
dialog.panel_1.updateUI();

}

}

}

但是,这不会使面板更新为新内容。有什么建议吗?提前致谢

最佳答案

which should display a different content based on the value selected in the JComboBox.

阅读 How to Use Card Layout 上的 Swing 教程部分它有一个工作示例,可以完全满足您的需求。

编辑:

dialog.panel_1 = dialog.panel_item_1; 

真正的问题是您不能只更改对变量的引用并期望组件显示在面板上。在面板上执行 revalidate() 之前,您仍然需要将组件添加到面板。所以你的代码是这样的:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

但是,更好的解决方案是使用 CardLayout 来为您完成所有这些工作。

关于java - 使用 JComboBox 在 JDialog 中更新 JPanel 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861641/

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