こにちわ、貼り絵職人です。趣味はライフハックと時短です。
最近JavaのTipsばっかりな今日この頃いかがお過ごしでしょうか
イベント処理でよく「ItemListenerインターフェース」を使うと思うのですが
イベントの変更(たとえば、コンボボックスを変更するときだったりとか、チェックボックスやラジオボタンをON、OFFするときだったりとか)
のときに「ItemListenerインターフェース」をimplementsすることがあるけど、たとえば
『コンボボックスが変更されたらダイアログが出てOKボタンを押したら変更できる』とか
『チェックボックスをONしたときにダイアログが出てOKボタンを押したら変更できる』とか
そういう処理が必要な場合があります。
ItemListenerのitemStateChangedは変更される前、された後二回呼び出されます。
そのためitemStateChangedのときに変更される前か、変更された後のStatus(状態)がわからない状態なので
二度ダイアログが出てしまうという状態になります。
この回避方法はItemEvent.SELECTEDで分岐できます
参考:http://java.sun.com/docs/books/tutorial/uiswing/events/itemlistener.html
//where initialization occurs
checkbox.addItemListener(this);
…
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
label.setVisible(true);
…
} else {
label.setVisible(false);
}
}
e.getStateChange() == ItemEvent.SELECTEDがFALSEなら変更される前、TRUEなら変更された後を表します。
つまり、FALSEのときにダイアログを出せばOK変更後は出ないという形になります。
コメント