2012-04-01 3 views
5

私はhereからどのように使用するのかトレイを見てきました。だから私はこの方法でそれを使用します。ユーザーがクローズウィンドウをクリックしたときにシステムトレイにJavaアプリケーションを置く方法

private void checkTray() throws IOException { 
    if (SystemTray.isSupported()) { 
     System.out.println("system tray supported"); 
     tray = SystemTray.getSystemTray(); 
     Image image = ImageIO.read(new FileInputStream(new File("logo.png"))); 
     ActionListener exitListener = new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       System.out.println("Exiting...."); 
       System.exit(0); 
      } 
     }; 
     PopupMenu popup = new PopupMenu(); 
     MenuItem defaultItem = new MenuItem("Exit"); 
     defaultItem.addActionListener(exitListener); 
     popup.add(defaultItem); 
     defaultItem = new MenuItem("Open"); 
     defaultItem.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       setVisible(true); 
       setExtendedState(JFrame.NORMAL); 
      } 
     }); 
     popup.add(defaultItem); 
     trayIcon = new TrayIcon(image, "SystemTray Demo", popup); 
     trayIcon.setImageAutoSize(true); 
    } 
    addWindowStateListener(new WindowStateListener() { 

     public void windowStateChanged(WindowEvent e) { 
      if (e.getNewState() == ICONIFIED) { 
       try { 
        tray.add(trayIcon); 
        setVisible(false); 
        System.out.println("added to SystemTray"); 
       } catch (AWTException ex) { 
        System.out.println("unable to add to tray"); 
       } 
      } 
      if(e.getNewState() == WindowEvent.WINDOW_CLOSING){ 
       try { 
        tray.add(trayIcon); 
        setVisible(false); 
        System.out.println("added to SystemTray"); 
       } catch (AWTException ex) { 
        System.out.println("unable to add to system tray"); 
       } 
      } 
      if (e.getNewState() == 7) { 
       try { 
        tray.add(trayIcon); 
        setVisible(false); 
        System.out.println("added to SystemTray"); 
       } catch (AWTException ex) { 
        System.out.println("unable to add to system tray"); 
       } 
      } 
      if (e.getNewState() == MAXIMIZED_BOTH) { 
       tray.remove(trayIcon); 
       setVisible(true); 
       System.out.println("Tray icon removed"); 
      } 
      if (e.getNewState() == NORMAL) { 
       tray.remove(trayIcon); 
       setVisible(true); 
       System.out.println("Tray icon removed"); 
      } 
     } 
    }); 
} 

とコンストラクタで:私は近くの窓をクリックすると

this.setDefaultCloseOperation(JFrame.ICONIFIED); 

、私のアプリケーションは、システムの試みにならないが、それは自分自身を閉じます。どうすれば解決できますか?誰かが私を助けることができる?

+0

をjavax/swing/JFrame.html#setDefaultCloseOperation(int)?WindowConstants http://docs.oracle.com/javase/6/docs/api/javax/swing/WindowConstants.html – ecle

+0

Nothing_on_closeを使用する必要がありますか? – JackTurky

+0

はい、 – ecle

答えて

4

私はこの追加解く: `JFrame.ICONIFIED`は[setDefaultCloseOperation()]の値になったとき(http://docs.oracle.com/javase/6/docs/api/ため

this.addWindowListener(new WindowAdapter(){ 
public void windowClosing(WindowEvent windowEvent) { 
    setExtendedState(JFrame.ICONIFIED); 
    } 
}); 
+0

あなたのコードは完全に動作します。ありがとう。 –

関連する問題