- PR -

再度JComboBoxについて

1
投稿者投稿内容
ケンジ
会議室デビュー日: 2003/12/04
投稿数: 7
お住まい・勤務地: 川崎市川崎区
投稿日時: 2003-12-08 16:50
いつもお世話になってます、コンボボックスの動作でまたアドバイスをお願いします。

コンボボックスにcombo.setSelectedItem()を使って値を設定すると、それと同時にコンボボックスのアクションリスナーが通知されてしまい困っております。リスナーに通知せずにただセットして表示だけさせたい場合はどのようにすればよろしいでしょうか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-12-08 17:07
unibon です。こんにちわ。

引用:

ケンジさんの書き込み (2003-12-08 16:50) より:
コンボボックスにcombo.setSelectedItem()を使って値を設定すると、それと同時にコンボボックスのアクションリスナーが通知されてしまい困っております。リスナーに通知せずにただセットして表示だけさせたい場合はどのようにすればよろしいでしょうか?


コンボボックス(javax.swing.JComboBox)に限らず、
Swing のコントロールは全般的にこのような挙動のようであり、
私も過去に困ったことがあります。
その時に Swing API の中をいろいろ探してみたのですが、
どうも自分で set した結果リスナが呼ばれたのか、
他者からの変更によりリスナが呼ばれたのかを、
区別する仕組みは API に備わっていないように感じました。

結局、自前でフラグを用意しておいて、
自分で set する場合にはそのフラグをオンにしてから set し、
リスナではそのフラグを見て判断する、
という泥臭いやりかたで回避したことはあります。
ただ、一応これでもうまく動くみたいです。
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2003-12-08 17:22
JComboBoxのsetSelectedItemかselectedItemChangedを
オーバーライドすれば出来ると思いますよ。

またはsetSelectedItemを改造した関数を新規に作成するか。
1

スキルアップ/キャリアアップ(JOB@IT)