2011-07-03 6 views
9

私のプログラムは、Windowsの時計の近くのタスクバーステータスエリアにアイコンを表示し、その方法を見つけたいと思っています。Windowsのシステムトレイで自分のプログラムを非表示にする

「X」がウィンドウ上で押されていてもシステムトレイには表示されていないのであれば、私のプログラムはステータスエリアに開いたままにしておきたいですが、 Googleでは(私はおそらく適切な条件を検索していないだろう)助けなかった。

編集:私は誤った用語を使用したと思います。私は通知領域に私のプログラムのアイコンを持っている方法を知っている、私が望むものは、ウィンドウを最小化するときに通常表示される領域でそれを隠すことです。

+0

の正式名称、私は「X」のウィンドウの上に押された場合、私のプログラムは、ステータス領域に開いたままにしたいのですが、あります_システムトレイ_は_領域です(_ [こちら](http://blogs.msdn.com/b/oldnewthing/archive/2003/09/10/54831.aspx)を参照)。それはあなたの検索を助けるかもしれません。 – user786653

+0

@ user786653 Javaの実装がシステムトレイの名前になっても面白いです。それはちょうど失われた1つの戦いraymondと共同で - 公式ガイドと一緒にそれを使用する方法(これは良いことです〜) – Voo

+0

Voo:Javaの実装は、Windowsだけでなく、より多くのシステムで動作し、トレイ«... – Joey

答えて

7

通知領域にプログラムのアイコンを表示する方法を知っていますが、ウィンドウを最小化するときに通常表示される領域で非表示にしています。

システムトレイは使用しないでください。

事が

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
+0

ありがとう。私は正しい方法を見ていませんでした。私はそれを見えないようにすることによってそれを隠すだろうと考えていたはずです。 –

2

例を見ることができる私はあなたがメインフォームを最小化したときにタスクバーボタンを削除することにしたいと思います。これを実現するには、可視のプロパティをfalseに設定します。ただし、Javaフレームワークで行うことができます。

4
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.UIManager; 

public class HideToSystemTray extends JFrame { 
    TrayIcon trayIcon; 
    SystemTray tray; 
    JButton button; 

    HideToSystemTray() { 
     super("SystemTray test"); 
     button = new JButton("Press"); 
     button.setBounds(10, 10, 40, 40); 
     setUndecorated(true); 
     getContentPane().add(button); 
     System.out.println("creating instance"); 
     try { 
      System.out.println("setting look and feel"); 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } catch (Exception e) { 
      System.out.println("Unable to set LookAndFeel"); 
     } 
     if (SystemTray.isSupported()) { 
      System.out.println("system tray supported"); 
      tray = SystemTray.getSystemTray(); 

      Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.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) { 
        tray.remove(trayIcon); 
        setVisible(true); 
        System.out.println("Tray icon removed"); 
       } 
      }); 
      popup.add(defaultItem); 
      trayIcon = new TrayIcon(image, "SystemTray Demo", popup); 
      trayIcon.setImageAutoSize(true); 
     } else { 
      System.out.println("system tray not supported"); 
     } 

     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       //Execute when button is pressed 
       System.out.println("You clicked the button"); 
       try { 
        tray.add(trayIcon); 
        setVisible(false); 
        System.out.println("added to SystemTray"); 
       } catch (AWTException ex) { 
        System.out.println("unable to add to tray"); 
       } 
      } 
     }); 


    /* 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()==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"); 
     } 
    } 
    }); */ 
    setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png")); 

    setVisible(true); 
    setSize(300, 200); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public static void main(String[] args) { 
    new HideToSystemTray(); 
} 
} 
+1

コードの詳細をいくつか追加してください。また、他の人がそれを理解しやすいように、コードの大きな部分をコメントした理由 –

関連する問題