最初のUIアクションとして、親フレームのないモーダルJDialogを表示するアプリケーションがあります。モーダル親なしJDialogはフォーカスを取得しません
public LoginDialog(Frame owner, Config config, Object... params) {
super((Frame)null, true);
それは、残念ながら、それが表示されたら、それが前面に表示されますが、それがフォーカスをつかむしないという迷惑な特性を有しています。
ユーザは、スタートメニューをダブルクリックしてアプリケーションを起動した後、マウスを使用して「ログイン」ダイアログを選択し、情報を入力する必要があります。
正面に表示されているときに、このJDialogがフォーカスを取得する方法はありますか?
私はsetVisible(true)の呼び出し中にinvokeLaterの前、後、および経由で "requestFocus"を呼び出そうとしましたが、これらのどれも効果がないようです。
モーダルダイアログでフォーカスを取得するにはどうすればよいですか?
更新:この問題は、バックグラウンドの「待機ウィンドウ」を表示しようとするコードです。このウィンドウは、ログインダイアログの「バック」にハックとして表示され、ダイアログが消えたときに「お待ちください」というメッセージが表示されます。アプリケーションによって作成された最初のウィンドウだったので、それに焦点を当てました。このハックを使ってイベントディスパッチスレッドの中で対話を再度フォーカスさせる方法があるのかどうかはわかりませんが、ハッキングを解除して正しく処理することで修正しました。
requestFocus()の代わりに[requestFocusInWindow()](http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/JComponent.html#requestFocusInWindow())を使用します。希望が助けることができる。 –
は、コードを追加せずに動作するだけで、問題を再現できませんでした。 – kleopatra