0

この API はどのような用途に使用されますか?

キーボードとマウスの両方のアクションを ComboBox にトラップして、ユーザーが選択したときにビジネス ロジックを呼び出すために使用できることを念頭に置いて、数か月前に採用しました。開発者として、テスターが関与して実際にキーボードでコンボボックスを使用しようとするまで、私はマウスだけを使用して、幸いなことに無知で、私のソリューションが良いと考えていました。itemStateChanged() は、アイテムの状態を変更することが何を意味するかについて、非常に直感に反する (とにかく私にとって) 感覚を持っているようです。

マウスで使用すると、ユーザーはマウスでドロップリスト上を移動できます。ドロップリストは、現在マウス カーソルを含むコンボ ボックス エントリを強調表示しますが、イベントは生成しません。ユーザーが実際に項目をクリックすると、イベントが生成されます。これは非常に直感的で、私が期待するものです。

一方、キーボードでは、下向き矢印を押すたびに itemStateChanged イベントが生成されます。これは直感に反しており、私が望むものではありません。ユーザーが選択が行われたことを示す Enter キーを押して選択した場合にのみ、イベントを生成したいと考えています。つまり、マウスの移動ではなく、マウスのクリックに類似しています。コンボ ボックスをこのように動作させる方法はありますか、またはこれらのイベントをトラップするために itemStateChanged を使用できませんか?

また、ItemEvent 自体には、状況を明確にするのに役立つものは何も含まれていないことも付け加えておく必要があります。

更新: OK、これが問題の核心です: ドロップ リストの要素をマウスで移動するのと同じように、Swing でコンボ ボックスのドロップ リストの下矢印を処理するにはどうすればよいですか? ItemListener と ActionListener はどちらも、矢印キー アクションをナビゲーションではなく「選択」と見なします。キーボードをマウスに似せたいのですが。私たちの要件は、すべてがキーボードで動作するようにすることです。マウスは、このアプリケーションの経験豊富なユーザーがあまり使用しないと便利です。

4

2 に答える 2

1

ユーザーが項目を選択または選択解除すると、Javadocが呼び出されます。 itemStateChanged(ItemEvent e)そして、あなたが見るものはまったく同じ動作です。矢印キーを使用すると、キーを押すたびに、コンボから特定の項目を効果的に選択 (および同時に選択解除) できます。

あなたの状況ではJButton、ユーザー選択の確認としてそのサーバーの一部としてビジネス ロジックを実装することを検討するか、 を使用してFocusListener ロジックJComboBoxをの一部として使用することを検討する必要があると思いますpublic void focusLost(FocusEvent e)。これは、より良い画像を得るのに役立つチュートリアルですFocusListener

于 2012-08-13T20:13:15.813 に答える
0

JComboBoxドキュメントから

aListener は、選択された項目が変更されると、1 つまたは 2 つの ItemEvent を受け取ります。

ここで、文言が少し軽いことを最初に指摘しますが、これが言っていることは、ユーザーが (ドロップダウンから) 項目を選択するたびに、少なくとも 1 回、おそらく 2 回通知されるということです。

あなたが本当に使いたいのは、ActionListener

選択が行われると、ActionListener は ActionEvent を受け取ります。コンボ ボックスが編集可能な場合、編集が停止すると ActionEvent が発生します。

于 2012-08-13T20:07:39.320 に答える