インターアクティブなユーザインターフェースを作るにはイベントリスナーの設置が必須ですが、イベントリスナーに発生するイベントにたくさん種類があるわけではありません。
例えば、以前公開した以下のサンプルプログラムですが...
yasuo-ssi.hatenablog.comチェックボックスも、ドロップダウン選択リストも、同じ、itemStateChanged というイベントしか発生しません。このイベントがチェックボックスで発生したのか、ドロップダウンリストで発生したのか、どうやって区分するのでしょうか。
一つは、イベントが発生した時に、そのアイテムの取った値を取得して、その値に応じて何らかの動作をさせる、という方法があります。
チェックボックスの場合は、.getState() というメソッドがありますし、ドロップダウン選択リストは、getSelectedItem() というメソッドがあります。
例えば...
check_state = self.checkbox.getState()
choice_item = self.choice1.getSelectedItem()
というように。チェックボックスの場合は、値は True か False、ドロップダウン選択リストは、値は選択肢名になります。実際のこのイベントはどちらのアイテムで発生したかは分かりませんが、とりあえず現在それらのアイテムが取っている値を取得して、それに応じた動作をさせるということです。
もう一つは、イベントに発生元を調べるメソッドがあります。getItemSelectable()
です。
従って、 print event.getItemSelectable() と書くと、次のような答えを返します。
ドロップダウン選択リスト
java.awt.Choice[choice1,138,258,34x21,current=2]
チェックボックス
java.awt.Checkbox[checkbox0,30,98,82x23,label=Checkbox,state=false]
この答えに応じて、それぞれ対応した動作を行わせることができます。
-------------
なお、イベントのプロパティを取得することもできますが、これだと発生元を区別することはできないようです。因みにアイテムリスナーのイベントの場合は、次のプロバティがあります。
SELECTED
DESELECTED
ITEM_FIRST
ITEM_LAST
ITEM_STATE_CHANGED
このプロパティを調べるには、event に .getStateChange() というeventのプロパティを調べるメソッドがありますので、
if event.getStateChange() == event.SELECTED:
などと使うことになるかと思います。
-----------
参考ページ
・ItemListener (Java Platform SE 8)
・ItemEvent (Java Platform SE 8)
---------