2011-11-21 8 views
6

インスタンスを作成し、そのminimize buttonをクリックして、System Tray(通常はtaskbar)のウィンドウに非表示にします。ウィンドウの最小化イベントをトラップする方法はありますか?

私はjava.awtパッケージでSystemTrayクラスを使用することで私はそれを行うことができますが、私はそれについてもチュートリアルも作業プログラムの例も得ていないことを知りました。

SystemTrayクラスのチュートリアルサイトへのリンクを取得するか、または本体がウィンドウの最小化イベントをトラップする方法を知っているかどうかを確認するために、ここでこの質問をしました。

+2

多分両方のリンクが役立ちますhttp://download.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.htmlおよびhttp://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/ – HRgiger

答えて

4

これはウィンドウの最小化イベントをトラップし、トレイアイコンを作成します。また、タスクバーからウィンドウが削除され、トレイアイコンにリスナーが追加され、マウスがウィンドウを復元するようになります。コードは少しけんか腰ですが、あなたの学習の目的のために十分でなければなりません:作成されるだろう

public class Qwe extends JFrame { 

public static void main(String[] args) { 
    final Qwe qwe = new Qwe(); 

    qwe.addWindowStateListener(new WindowStateListener() { 
     public void windowStateChanged(WindowEvent e) { 
      if (e.getNewState() == ICONIFIED) { 
       try { 
        final TrayIcon trayIcon = new TrayIcon(new ImageIcon("/usr/share/icons/gnome/16x16/emotes/face-plain.png").getImage()); 
        trayIcon.addMouseListener(new MouseAdapter() { 
         @Override 
         public void mouseClicked(MouseEvent e) { 
          qwe.setVisible(true); 
          SystemTray.getSystemTray().remove(trayIcon); 
         } 
        }); 
        SystemTray.getSystemTray().add(trayIcon); 
        qwe.setVisible(false); 
       } catch (AWTException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     } 
    }); 
    qwe.setSize(200, 200); 
    qwe.setVisible(true); 
} 

} 
1
private void windowStateChanged(java.awt.event.WindowEvent evt) { 
    // Use getExtendedstate here. 
} 
+0

'Sun/Oracle'のチュートリアルサイトにはどのような例がありますか? –

+1

もちろん、チュートリアルを読んでください。 – camickr

5

WindowListenerインターフェースとJFrameaddWindowListener()方法は、フレームが最小化されているときは、決定に役立つはずです。

+0

+1、クリーナー.... –

2

最良の方法は、

1)SystemTray

2)SystemTray's Icon

JPopopMenuを追加し、次の

3)TopLevelContainerDefaultCloseOperationJFrame

他の例で WindowListener setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  • を使用して、

    • は常にsetDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

    • 通知は、このフォームcurrenet JVMに行ったことがないので、JMenuItemまたは別のAction/Eventから、SystemTray's JpopupMenuSystem.exit(1)を宣言することを忘れないでください動作しますネイティブOSからPCの電源切断または再起動まで

  • +0

    賢明な説明に感謝します。 –

    0
    frame.addWindowListener(new WindowAdapter() {@Override 
        public void windowIconified(WindowEvent e) {} 
    }); 
    
    関連する問題