开发者

Problem updating JPanel in JDialog with JComboBox

I have created a JDialog which contains a JComboBox and a panel underneath which should display a different content based on the value selected in the JComboBox. I have created a JPanel (panel_1) which is added to the content pane of the dialog and an additional JPanel for each of the possible items in the JComboBox (for example panel_item_1 and panel_item_2 if it does have only 2 items). I have attached the following listener class in the 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();

    }

}

}

However this doesn't make the panel update with the new content. Any suggestion? Thanks in advance


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

Read the section from the Swing tutorial on How to Use Card Layout which has a working example that does exactly what you want.

Edit:

dialog.panel_1 = dialog.panel_item_1; 

The real problem is that you can't just change the reference to a variable and expect the component to show up on the panel. You still need to add the component to the panel before you do a revalidate() on the panel. So your code is like:

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

However, the better solution is to use a CardLayout which does all this work for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜