5

私には独特の要件があります:

多数のフィールドと [OK] および [キャンセル] ボタンを備えた [新しいオブジェクトの作成] モーダル ダイアログがあります。[OK] ボタンにフォーカスを設定して、ユーザーがダイアログを呼び出して Enter キーを押すだけで、デフォルト値で新しいオブジェクトを作成できるようにします。を呼び出してみrequestFocusInWindow()ましたが、ウィンドウが実際に表示されるまで機能しません。ダイアログはモーダルであるため、ウィンドウが表示された後に呼び出すことはできません。setInitialFocusedComponent()また、ダイアログ クラスのようなメソッドはありません。

OK、それでKeyListener、ダイアログ内のすべてのフィールド (そのうち 3 つだけ、大したことではありません) の作成に進みました。これは、ユーザーが Enter キーを押した場合に手動で [OK] ボタンを押すようにするものです。ここでの問題は、最初のフィールド (したがってフォーカスされたフィールド) が でありJSpinner、それが独自の を消費することKeyEventsです。したがって、Enter キーを押しても何も起こりません。

要素を再編成せずに、ダイアログでこの「Enter to OK」動作を実現するにはどうすればよいですか?

4

1 に答える 1

8

2つのこと:

  1. setDefaultButton を使用してみましたか?:dialog.getRootPane().setDefaultButton(okButton)
  2. invokeLater で requestFocusInWindow() を呼び出すことを検討できます。

このような:

 SwingUtilities.invokeLater(new Runnable()
     @Override
     public void run() {
         okButton.requestFocusInWindow();
     }
 });
于 2012-04-25T22:32:25.173 に答える