2009-08-19 17 views
9

マウスをチェックボックスの上に移動すると、このコードがコンソールに表示される理由を教えてください。行われる「変更」イベントとは何ですか?JCheckbox変更リスナーがマウスオーバーイベントを通知されました

checkBox.setSelected(boolean) 

をしてで行うことができない、私のリスナーに通知があります。

import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 


public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     JCheckBox c = new JCheckBox("Print HELLO"); 
     c.addChangeListener(new ChangeListener() { 

      @Override 
      public void stateChanged(ChangeEvent e) { 
       System.out.println("HELLO"); 
      } 
     }); 
     f.getContentPane().add(c); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.pack(); 
     f.setVisible(true); 
    } 

} 

注:私のプログラムでは、私が行うことができるようにしたいので、私はアクションリスナーを使用していませんアクションリスナー。では、この「マウスオーバー」イベントを無効にする方法や、リスナーを実装する別の方法がありますか?

+0

奇妙なことに、私は 'setSelected'を使って変更リスナをトリガすると考えました。私は何か他のことを考えなければならない。 – jeef3

+0

Mac OSX上でJava 5を実行した場合、イベントでマウスが表示されません。 – banjollity

+0

@ jeef3:setSelectedは変更イベントをトリガします。だからこそ私はそれを使用しています。事は、変更イベントもマウスの動きによって引き起こされるということです:) –

答えて

28

フォーカスが獲得/失われたときにイベントがマウスオーバーすると、コンポーネントの状態が変更されます。

代わりに、ItemEventを与えるItemListenerを使用できます。

ItemListenerインターフェイスを実装するオブジェクトは、イベントが発生したときにこのItemEventを取得します。リスナーは、個々のマウスの動きやマウスのクリックを処理するための詳細を考慮しておらず、代わりに「選択されたアイテム」や「選択解除されたアイテム」のような「意味のある」イベントを処理することができます。

チェックボックスに追加するには、AbstractButtonクラスのaddItemListener()メソッドを使用します。ただ、このとのaddChangeListener置き換える:

c.addItemListener(new ItemListener() { 

    public void itemStateChanged(ItemEvent e) { 
     System.err.println(e.getStateChange()); 
    } 
}); 
+0

ありがとうございます。私はいつもアイテムリスナーがコンポーネントのようなリストにしか適用されませんでしたが。 :) –

+1

問題ありません。実際にはリストに使用されるListSelectionListenerです。リストの選択は、異なるイベントタイプを必要とするセルの範囲の選択をサポートする必要があるため、リストとボタンに対して異なるインターフェースがあります。 – Aaron

1

チェックボックスの状態(チェックボックスモデルのみ)は、マウスの上にマウスがあるかどうかによって変わります。したがって、状態変更イベントが予想されるはずです。

チェックボックスをオンにしてチェックボックスをチェックし、それに応じて更新してください。 「膨れた」コンポーネントインターフェースを使用するのではなく、モデルのためにまっすぐ進む方が良いです。

6

使用c.setRolloverEnabled(falseを) `、あなたは、マウスの動きのためのすべてのイベントを取得することはできません。

関連する問題