使用JComboBox更新JDialog中的JPanel时出现问题

时间:2011-07-28 15:35:04

标签: java swing jpanel jcombobox jdialog

我创建了一个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();

    }

}

}

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

1 个答案:

答案 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来完成所有这些工作。