2

Javaスイングボタンを「フォーカス不可」にしたい。ボタンはフォーカスを受け取らないようにする必要がありますが、マウス クリックを受け取ることができる必要があります。

次のオプションを考えましたが、これらは問題を完全に解決しないか、エレガントに見えません。他の/より良い/提案されたオプションはありますか?

  1. ボタンがフォーカスを受け取るとすぐに次のコンポーネントにフォーカスを移動します (ただし、ボタンがラベル以外の UI 上の唯一のコンポーネントである場合はどうすればよいでしょうか?)
  2. 別のフォーカス不可能なコンポーネントをボタンとして実装します (マウス イベント、境界線を含むラベルなど) (これは私にはあまりエレガントに見えません)
  3. キーボード イベントに応答しないように、キーボード イベントをオーバーライドする匿名ボタンの実装を作成します (これはフォーカスの問題を解決しませんが、問題の根本は偶発的なキーボード クリックを回避することであるため、私にとってはある程度問題ありません。オプションがまったくない場合にのみこれを行いますが、それでもオプション 2 を優先します)
4

3 に答える 3

12

すべての Swing コンポーネントには、これを行うための setFocusable メソッドがあります。

JButton button = ...
button.setFocusable(false);
于 2010-09-08T08:50:37.663 に答える
2

setFocusable()から継承したメソッドを呼び出そうとしましたjava.awt.Componentか?


資力 :

于 2010-09-08T08:49:52.167 に答える
1

ボタンが気に入らないだけのacceptメソッドを使用して、独自のFocusTraversalPolicyを実装する(またはContainerOrderFocusTraversalPolicyなどを拡張する)ことができます。

JFrame frame = new JFrame();
... /* create other components */
frame.setFocusTraversalPolicy(new ContainerOrderFocusTraversalPolicy() {
    public boolean accept(Component c) {
        return super.accept(c) && c!=iDontLikeYouButton;
    }
});
于 2010-09-08T08:49:27.817 に答える