JCheckBoxの変更リスナーがイベントの上にマウスを通知します
-
19-09-2019 - |
質問
いくつかのいずれかは、私に説明していただけますか?行われる「変更」イベントは何ですか?
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);
}
}
注:私のプログラムでは、私が行うことができるようにしたいので、私はアクションリスナーを使用しないでください。
checkBox.setSelected(boolean)
と私のリスナーに通知している、アクションリスナーを行うことはできません。だから、イベントまたは私は自分のリスナーを実装することができます別の方法「の上にマウス」これを無効にする方法はありますか?
解決
あなたはフォーカスが得たとして/コンポーネントの状態への変化を表し失ったマウスオーバーでイベントを取得します。
代わりに、あなたはあなたのItemEventsを与えるのItemListenerを使用することができます。
イベントが発生したときに、のItemListenerインタフェースを実装するオブジェクトは、こののItemEventを取得します。リスナーは、個々のマウスの動きやマウスクリックを処理の詳細を免れるされ、その代わりに「項目選択」または「項目選択解除」のような「意味のある」(セマンティック)イベントを処理することができます。
あなたはAbstractButtonのクラスのaddItemListener()メソッドを使用してチェックボックスに追加することができます。ただ、これでのaddChangeListenerを置き換えます:
c.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
System.err.println(e.getStateChange());
}
});
他のヒント
)c.setRolloverEnabled(false
を使用し、 `、あなたは、マウスの動きのためのすべてのイベントを取得することはできません。
チェックボックス(だけでも、チェックボックスモデル)の状態は、それはそれの上にマウスを持っているかいないかに応じて変化します。だから、状態変化イベントが予想されなければならない。
それでは、チェックボックスがであるものの状態を参照し、それに応じて更新するように戻って確認してください。それは、「肥大化」コンポーネント・インタフェースを使用するのではなく、モデルのためにまっすぐに行く方が良いです。