我创建了一个JDialog,其中包含一个JComboBox和一个面板,下面应该根据JComboBox中选择的值显示不同的内容。我创建了一个JPanel(panel_1),它被添加到对话框的内容窗格中,并为JComboBox中的每个可能项目添加了一个额外的JPanel(例如panel_item_1和panel_item_2,如果它只有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();
}
}
}
但是,这不会使面板更新为新内容。有什么建议吗?提前致谢
答案 0 :(得分:4)
应根据JComboBox中选择的值显示不同的内容。
阅读How to Use Card Layout上的Swing教程中的部分,其中有一个完全符合您要求的工作示例。
编辑:
dialog.panel_1 = dialog.panel_item_1;
真正的问题是,您不能只更改对变量的引用,并期望组件显示在面板上。在面板上执行revalidate()之前,您仍需要将组件添加到面板中。所以你的代码就像:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
然而,更好的解决方案是使用CardLayout来完成所有这些工作。