- 締切済み
コンボボックスについて
先ほど質問した者です。javaの開発環境としてはj2sdk1.4.2_13を使用しています。 質問内容 コンボボックスのプログラム開始時の一番最初に、すでに選択されている項目を選択してもイベントは発生しないのですが、どうすればプログラム開始時に選択されている項目が表示されますか? 教えてください。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ssr-y6
- ベストアンサー率71% (5/7)
itemStateChangedは、実際に選択が変わったときでないと呼び出されないので、 ポップアップの消滅を検出し、もし同じ選択だった場合はここでItemEventを生成してやればよいかと思います。 以下がその例です。 import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; class mycombobox extends JComboBox implements PopupMenuListener { Object SelectedObject; public mycombobox(Object it[]) { super(it); addPopupMenuListener(this); SelectedObject = it[0]; }; void ChangeCheck() { if (SelectedObject == getSelectedItem()) fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED, SelectedObject, ItemEvent.SELECTED)); SelectedObject = getSelectedItem(); }; public void popupMenuCanceled(PopupMenuEvent e) { ChangeCheck(); }; public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}; public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { ChangeCheck(); }; } public class combotest1 implements ItemListener { static String[] IT = { "Ele 1", "Ele 2", "Ele 3", "Ele 4" }; mycombobox MCB; JTextArea TA; int SC; public combotest1() { JFrame MF = new JFrame("Combobox Test"); MF.setSize(320, 240); Container c = MF.getContentPane(); c.add(MCB = new mycombobox(IT), BorderLayout.NORTH); c.add(new JScrollPane(TA = new JTextArea()), BorderLayout.CENTER); MF.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); MF.setVisible(true); MCB.addItemListener(this); SC= 0; }; public void itemStateChanged(ItemEvent e) { TA.append(Integer.toString(SC) + " : " + e.toString() + "\n"); SC ++; }; public static void main(String args[]) { new combotest1(); }; }
- tekebon
- ベストアンサー率62% (36/58)
イベントとしてはitemStateChangedを利用しているかと思いますが、 このイベントは項目が変更にならないと呼び出されません。 そこで、選択された項目に対する処理をするonSelect()のような メソッドを自作しitemStateChanged内から呼び出します。 (引数は項目名や、項目のindexを渡せばよいかと思います) このonSelect()は任意に呼び出せるので、初期化処理から 初期値の項目に対して呼び出せば表示の初期化ができるかと思います。