質問

メインゲームを保持する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);

上記をお試しください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top