2016-05-07 3 views
1

私はGUIのJavaアプリケーションを持っています。アプリはシステムトレイに最小化されます。トレイアイコンをクリックしたときにframe.requestFocusInWindow()を入れて、復元されたJFrameがユーザーの注目を集めるようにしました。jreをビルドするときに.requestFocusInWindow()が機能しない

コードは次のとおりです。

trayicon.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      try { 
       if (e.getButton()==MouseEvent.BUTTON1) frame.setVisible(true); 
       frame.requestFocusInWindow(); 
      } catch (Exception ex) { 
       Logger.getLogger(TrayControl.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
}); 

これは、私は、NetBeans IDEでアプリケーションを実行する場合は完璧に動作しますが、私は.jarファイルを構築し、それを実行すると、アプリケーションウィンドウには、ユーザーの注目を得ていないため、.requestFocusInWindow()を動作するように思われません私が開いていた他のウィンドウの後ろに復元されます。ここで何が起こっているのですか?

+0

あなたはSwingUtilities.invokeLaterを(...)でrequestFocusInWindowメソッドをラップしてみてください。あるいは、フレームに追加されたコンポーネントで 'grabFocus()'メソッドを試してみてください。 – camickr

+0

ありがとう!しかし、うまくいきません、 'JFrame'は他のウィンドウの前に表示されません。私は問題が焦点ではないと思う、ウィンドウの状態です。最小化されたボタンがクリックされると 'JFrame'がスクリーンからシステムトレイのアイコンに隠れます。おそらく、トレイのアイコンをクリックすると、' JFrame'は 'frame.setVisible(true)'と表示されますが、 ...できますか? – FiroKun

答えて

0

問題を解決しました。私は以下のようMouseListenerJFrame.setExtendedState() metothを使用:

trayicon.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     try { 
      frame.setExtendedState(JFrame.NORMAL); 
      frame.setVisible(true); 
     } catch (Exception ex) { 
      Logger.getLogger(TrayControl.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
}); 
関連する問題