省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ImageJ / Python プログラミング Tips: イベントリスナーにおいてイベントを区分する (1)

 インターアクティブなユーザインターフェースを作るにはイベントリスナーの設置が必須ですが、イベントリスナーに発生するイベントにたくさん種類があるわけではありません。

  例えば、以前公開した以下のサンプルプログラムですが...

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)

---------

yasuo-ssi.hatenablog.com