2010-12-05 3 views
0

複数のJPanelを使用するJavaアプレットを作成しました。 1つはメインメニュー用、1つはハイスコアリスト用、もう1つはゲーム自体用、もう1つはスコアを示す最終的な終了画面用で、ユーザーに名前の入力を求めます。複数のJPanelでフォーカスを維持するJavaアプレット

MacOS Xでは、JPanelがフォーカスを取得すると(MouseListenerまたはTimerを使用して)、フォーカスが新しいJPanelに簡単に切り替わります。ただし、Windowsでは、手動でフォーカスを戻すために、各画面で毎回クリックする必要があります。

私の質問は、トップレベルのJPanelが変更された場合でも、アプレットの一番上のJPanelに常に焦点を当てるためのエレガントなクロスプラットフォームソリューションですか?

は、ここで私はのJPanelを切り替えるためにやっているのサンプルコードです:

public void showMainMenu() { 
     if (endScreen != null) { 
      endScreen.stop(); 
      getContentPane().remove(endScreen); 
      endScreen = null; 
     } 

     if (highScoreView != null) { 
      getContentPane().remove(highScoreView); 
      highScoreView = null; 
     } 

     if (gameView != null) { 
      gameView.stop(); 
      getContentPane().remove(gameView); 
      gameView = null; 
     } 

     if (mainMenu == null) {   
      mainMenu = new MainMenu(d, this); 
     } 

     getContentPane().add(mainMenu);  
     forceRequestFocus(); 
     validate(); 
     repaint(); 
    } 

私はJPanelののフォーカスを取得するために非繰り返しタイマーを使用するように私はここで見つかった回避策を使用してみました、ユーザーはそれをクリックする必要はありません。問題は1度しか働かないという問題だけです。新しいJPanelが別のJPanelを置き換えた後、フォーカスは失われ、マウスのクリックでのみ取り戻すことができます。

答えて

0

私はそれを理解しました。 Timerを使用して最初のJPanelを取得してフォーカスを取得し、別のパネルに切り替えると、メインビューのtransferFocus()が新しいビューに呼び出されます。

関連する問題