2011-07-28 5 views
2

JComboBoxを含むJDialogを作成し、その下にJComboBoxで選択した値に基づいて別のコンテンツを表示するパネルを作成しました。ダイアログのコンテンツペインに追加されたJPanel(panel_1)と、JComboBox内の可能な各アイテムの追加JPanel(たとえば、2つのアイテムしかない場合はpanel_item_1およびpanel_item_2)を作成しました。私は、JComboBoxの中で、次のリスナークラスを添付していますJComboBoxでJDialogのJPanelを更新する際に問題が発生しました。

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(); 

    } 

} 

}

しかし、これは新しいコンテンツとパネルの更新を行いません。なにか提案を?事前に感謝します

+3

'updateUI()'の代わりに 'validate()'を使うのはどうですか? –

+1

アプリケーションコード内のupdateUIを決して "更新"することは決してありません。このメソッドはLAF – kleopatra

+2

私の盲目での使用のために_exclusively_ですか、ifとelse-ifの条件は全く同じですか? – kleopatra

答えて

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を使用することです。

関連する問題