この API はどのような用途に使用されますか?
キーボードとマウスの両方のアクションを ComboBox にトラップして、ユーザーが選択したときにビジネス ロジックを呼び出すために使用できることを念頭に置いて、数か月前に採用しました。開発者として、テスターが関与して実際にキーボードでコンボボックスを使用しようとするまで、私はマウスだけを使用して、幸いなことに無知で、私のソリューションが良いと考えていました。itemStateChanged() は、アイテムの状態を変更することが何を意味するかについて、非常に直感に反する (とにかく私にとって) 感覚を持っているようです。
マウスで使用すると、ユーザーはマウスでドロップリスト上を移動できます。ドロップリストは、現在マウス カーソルを含むコンボ ボックス エントリを強調表示しますが、イベントは生成しません。ユーザーが実際に項目をクリックすると、イベントが生成されます。これは非常に直感的で、私が期待するものです。
一方、キーボードでは、下向き矢印を押すたびに itemStateChanged イベントが生成されます。これは直感に反しており、私が望むものではありません。ユーザーが選択が行われたことを示す Enter キーを押して選択した場合にのみ、イベントを生成したいと考えています。つまり、マウスの移動ではなく、マウスのクリックに類似しています。コンボ ボックスをこのように動作させる方法はありますか、またはこれらのイベントをトラップするために itemStateChanged を使用できませんか?
また、ItemEvent 自体には、状況を明確にするのに役立つものは何も含まれていないことも付け加えておく必要があります。
更新: OK、これが問題の核心です: ドロップ リストの要素をマウスで移動するのと同じように、Swing でコンボ ボックスのドロップ リストの下矢印を処理するにはどうすればよいですか? ItemListener と ActionListener はどちらも、矢印キー アクションをナビゲーションではなく「選択」と見なします。キーボードをマウスに似せたいのですが。私たちの要件は、すべてがキーボードで動作するようにすることです。マウスは、このアプリケーションの経験豊富なユーザーがあまり使用しないと便利です。