2011-07-03 1 views
9

내 프로그램이 Windows의 시계 근처에있는 작업 표시 줄 상태 영역에 아이콘을 표시하고이를 수행하는 방법을 찾았 으면합니다.Windows의 시스템 트레이에 내 프로그램 숨기기

"X"가 창에서 눌려 지지만 시스템 트레이에서는 내 프로그램이 상태 영역에 열려 있도록하고 싶습니다. 그러나 그렇게하는 방법과 검색 방법을 모릅니다. Google에서 도움이되지 않았습니다. (아마도 적절한 용어를 검색하지 못했을 것입니다.)

편집 : 잘못된 용어를 사용했다고 생각합니다. 알림 영역에 내 프로그램 아이콘을 표시하는 방법을 알고 있습니다. 창을 최소화 할 때 일반적으로 표시되는 영역에서 숨길 수 있습니다.

+0

의 공식 이름, 나는 "X"가 창을 누르면 내 프로그램이 상태 영역에서 영업을하고 싶습니다이다 _system tray_는 _notification area_입니다 ([여기] (http://blogs.msdn.com/b/oldnewthing/archive/2003/09/10/54831.aspx) 참조). 그것은 당신의 수색을 도울 것입니다. – user786653

+0

@ user786653 Java 구현이 시스템 트레이 아래에있는 경우에도 재미가 있습니다. 그것은 단지 하나의 싸움 raymond와 공동 방금 잃어버린 - 그들의 공식 가이드와 함께 그것을 사용하는 방법 (좋은 일 이니 ~) – Voo

+0

Voo : 자바 구현은 Windows보다 많은 시스템에서 작동하며 다른 창 관리자는»시스템이라는 용어를 채택했습니다 트레이«... – Joey

답변

7

알림 영역에 내 프로그램의 아이콘을 저장하는 방법을 알고 있습니다. 창을 최소화 할 때 정상적으로 표시되는 영역에서 숨길 수 있습니다.

그런 다음 시스템 트레이를 사용하지 마십시오.

것은

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
+0

감사합니다. 나는 올바른 방법을보고 있지 않았다. 나는 그것이 보이지 않게함으로써 그것을 숨길 것이라고 생각 했어야했다. –

2

을 볼 수 있습니다. visible 속성을 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

코드에 대한 세부 정보를 추가하고 다른 사람들이 이해하기 쉽도록 코드의 큰 부분을 주석 처리 한 이유를 입력하십시오. –