JFrameにフォーカスする方法は?
-
22-07-2019 - |
質問
メインゲームを保持する1つのJFrameと、スコアを表示する別のJFrameを備えた小さなゲームを作成しています。問題は、それらを作成し終えると、JFrameのスコアが常にフォーカスされることです。 scoreDisplay.toFront()、scoreDisplay.requestFocus()、さらには:
を呼び出してみましたdisplay.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);
これを機能させる方法はありますか? 前もって感謝します、 ジョン・ムラノ
解決
ゲームフレームと同じフレームにスコアを設定することを検討しましたか?
その他の(クイックでダーティな)オプションは、逆順で作成するか、少なくとも(スコアがゲームに依存する場合)逆順で表示することです。
score.setVisible( true );
game.setVisible( true );
現在は次のように思われます:
game.setVisible( true );
score.setVisible( true );
他のヒント
トグル alwaysOnTop
こちらをご覧ください:
http://forums.sun.com/thread.jspa?threadID=5124278
APIのtoFrontについて読む http://java.sun.com /j2se/1.5.0/docs/api/java/awt/Window.html#toFront
一部のプラットフォームではこのVMが許可されない場合があります そのウィンドウをウィンドウの上部に配置する ネイティブアプリケーション、またはWindows 他のVM。
Windows OSでは、たとえばtoFront タスクバーのアイコンを ちらつきますが、ウィンドウは 戻る。
それは 前面のウィンドウはsetAlwaysOnTopです。
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);
requestFocus()
メソッドを呼び出します。
これは、オペレーティングシステムがフレームにフォーカスを与えることを許可しない多くの理由があるため、動作が保証されていません。別のアプリケーションでは、より高い優先度を持つ別のフレームが存在する可能性があります。また、フレームワークがフォーカスを要求することを許可しないLinuxデスクトップもあります(正しく思い出せば)。
成功の可能性を高めるため、フォーカスを要求する前に toFront()
メソッドを呼び出すこともお勧めします。
frame.setVisible(true);
frame.toFront();
frame.requestFocus();
フレーム処理、特にフォーカスとレイヤリングはオペレーティングシステムに非常に依存しているため、これは保証されません。フレームを表示可能に設定し、前面に移動して、フォーカスを要求します。 EDTを放棄すると、オペレーティングシステムがフレームにフォーカスを与える可能性があります。少なくとも、ウィンドウは一番上になければなりません。
私がする方法は:
frame.toFront();
frame.setState(Frame.NORMAL);
また、さらに制御したい場合は、requestFocuseを使用する必要があります。
ところで、ここに例があります: http://coding.derkeiler。 com / Archive / Java / comp.lang.java.gui / 2006-06 / msg00152.html
JOptionPaneMessageDialogコードの上に次のコード行を追加するだけです... this.setAlwaysOnTop(false);
frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
上記をお試しください。