- ベストアンサー
jCheckBoxの動作について
- jCheckBoxの動作について調査しています
- jCheckBoxをクリックすると、jCheckBox1_stateChanged()が5回実行されます
- Applet1クラスでjCheckBoxを作成し、その状態変化を監視しています
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ごめんなさい。 なぜ、5回実行されるのかは、わかりません。 Swingにはよく、バグがあったりするようです。 JAVAのGUI周りはどうも、挙動不信なところをがあって、 バグもたくさんあります。 今回のがバグかどうかは知りません。 それなりに理由があるかもしれないですが・・。私にはわかりません。 googleで調べてもなかなか答えを見出せない時が多いですね。 J2EE関連のほうに比べて、知っている人が少ないのかもしれない・・。 とはいえ、 チェックボックス1回につき1回の実行にしたいのであれば 解決策はあります。 私がもし納期に迫られているのであれば、 以下の解決策をとります。 Applet1_jCheckBox1_changeAdapterクラスに 以下のコードを追加します。 (1) private boolean previousState; というフィールドをひとつ追加する。 (2) stateChangedを変更する (変更前) public void stateChanged(ChangeEvent e) { adaptee.jCheckBox1_stateChanged(e); } (変更後) public void stateChanged(ChangeEvent e) { boolean nowState = ( (JCheckBox)e.getSource() ).isSelected(); if( previousState == nowState ) { return; } adaptee.jCheckBox1_stateChanged(e); previousState = nowState; } 以上。 これで、チェックボックスを1回押すごとに、1回だけ jCheckBox1_stateChanged( が呼ばれます。 こんなので、回答になったでしょうか。
その他の回答 (2)
- kacchann
- ベストアンサー率58% (347/594)
>jCheckBox1_stateChanged()がcheckboxを1クリックにつき、5回実行されている。 (メッセージが5回表示される) なぜでしょうか? まず間違いなく、 「ChangeEventが1クリックに付き5回、発生しているから」 でしょう。
- lawson
- ベストアンサー率44% (29/65)
NO1です >(1) >private boolean previousState; >というフィールドをひとつ追加する。 ですが、これの previousStateの初期値は jCheckBox1の初期と同じになるようにしといてくださいね。 private boolean previousState; を private boolean previousState = jCheckBox1.isSelected(); にするなり・・。そこらへんはうまくあわすという前提で・・ 以上です。
お礼
返答ありがとうございます。 NO.1さんのお礼のところに書いたとおりです。 StateChangedの仕様はこれから調査したいと思っています。
お礼
返答ありがとうございます。 自己解決できまして、イベントを stateChangedではなく、itemStateChangedになおしたら、思ったとおりの動作をするようになりました。 丁寧な返答ほんとにありがとうございました。