3

これはばかげた質問かもしれませんが、私は尋ねなければなりません!

ユーザーがオブジェクトを操作するときに、対応するメソッドを実行することになっている次のコード スニペットがあります。何らかの理由で、「foo」は印刷されませんが、「bar」は印刷されます。

myJSpinner1.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseEntered(java.awt.event.MouseEvent evt) {
    System.out.println("foo"); //"foo" is not printed
  }
});

myJSpinner2.addChangeListener(new java.awt.event.ChangeListener() {
    public void stateChanged(java.awt.event.ChangeEvent evt) {
    System.out.println("bar"); //"bar" is printed
  }
});

例外やスタック トレースは発生しません。MouseListener で何が欠けていますか? 前もって感謝します。

編集: MouseEntered は、まったく同じ方法で実装された JCheckBox で完全に機能します!

4

4 に答える 4

4

JSpinnerは、テキスト フィールドと 2 つのボタンで構成される複合コンポーネントです。の結果を反復処理し、getComponents()それぞれにリスナーを追加することで、それらすべてにマウス リスナーを追加することができます。

しかし、私の経験では、何かにそれほど多くの作業が必要な場合は、おそらく間違った方法で取り組んでいます。

のマウス入力情報が必要なのはなぜJSpinnerですか?
このイベントで何をしたいですか?

更新: パネル内のすべてのコントロールに関する情報を提供する場合は、ガラス板を使用してマウスの下のコンポーネントを検出することを検討してください。

Alexander Potochkin による行儀の良い Glasspane は、始めるのに適した場所です。

于 2010-03-31T13:44:24.420 に答える
2

MouseListenerこれは推測ですが、JSpinnerのエディターに ( への呼び出しを介して)を追加する必要があると思われますgetEditor()。エディターがComponent内の使用可能なすべてのスペースを占有してJSpinnerいるため、すべての をインターセプトしていると思いますMouseEvent

于 2010-03-31T11:50:51.773 に答える
2

これは私にとってはうまくいきました。

JSpinner spinner = new JSpinner();

((JSpinner.DefaultEditor)spinner.getEditor()).getTextField().addMouseListener(
    new java.awt.event.MouseAdapter() {            
    public void mouseClicked(final MouseEvent e) {   
        // add code here
    }
});

これは、ソフトウェア要件により、使いやすさを向上させるためにポップアップ キー ダイアログを表示するために必要でした。

于 2011-10-07T19:56:47.007 に答える
0

@Rapier回答への追加...

次のようなものを使用してスピナーを変更すると

yourOldSpinner = new JSpinner(new SpinnerModel(...))

以前の MouseListener が失われます...

の何かを変更する必要がある場合はSpinnerModel、新しいものを作成しないで、代わりにそのパラメータを変更してください! (そうすると、新しい SpinnerModel を割り当てると失われるため、MouseListener を再度割り当てる必要があります)。

例(私が話している...):

((SpinnerNumberModel)yourOldSpinner.getModel()).setValue(size/3);
((SpinnerNumberModel)yourOldSpinner.getModel()).setMinimum(0);
((SpinnerNumberModel)yourOldSpinner.getModel()).setMaximum(isize/2);
((SpinnerNumberModel)yourOldSpinner.getModel()).setStepSize(1);
于 2016-06-30T08:00:17.487 に答える