2011-07-03 8 views
9

Chciałbym, aby mój program wyświetlał ikonę w obszarze stanu paska zadań w pobliżu zegara w systemie Windows i znalazł sposób, aby to zrobić.Ukrywanie mojego programu w zasobniku systemowym w systemie Windows

Chodzi o to, że chciałbym, aby mój program pozostawał otwarty w obszarze statusu, jeśli przycisk "X" zostanie naciśnięty w oknie, ale nie w zasobniku systemowym, ale nie mam pojęcia, jak to zrobić i przeszukać w Google nie pomogło (prawdopodobnie nie szukam właściwych terminów).

Edytuj: Myślę, że użyłem złych terminów. Wiem, jak ustawić ikonę mojego programu w obszarze powiadomień, a chciałbym ukryć ją w obszarze, w którym jest zwykle wyświetlana podczas minimalizowania okna.

+0

Oficjalna nazwa dla _system tray_ to _notification area_ (zobacz [tutaj] (http://blogs.msdn.com/b/oldnewthing/archive/2003/09/10/54831.aspx)). To może pomóc w wyszukiwaniu. – user786653

+0

@ user786653 Zabawnie, nawet jeśli implementacja Java idzie pod nazwą zasobnika systemowego. To jedna walka z Raymondem i tym, co właśnie przegrało - wraz z ich oficjalnym przewodnikiem, jak z niego korzystać (co jest bardzo dobre ~) – Voo

+0

Voo: Implementacja Java działa na więcej systemów niż tylko Windows, a inni menedżerowie okien przyjęli termin »system taca «... – Joey

Odpowiedz

7

Wiem, w jaki sposób ustawić ikonę mojego programu w obszarze powiadomień. Chciałbym ukryć ją w obszarze, w którym jest zwykle wyświetlana podczas minimalizowania okna.

Następnie nie należy używać zasobnika systemowego.

Chodzi o to, chciałbym mój program pozostać otwarte w obszarze stanu, czy „X” jest wciśnięty w oknie,

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
+0

Dzięki. Nie patrzyłem na właściwe metody. Sądzę, że powinienem był domyślić się, że przez uczynienie go niewidocznym go ukryje. –

2

Chyba chcesz przycisk paska zadań należy usunąć po zminimalizowaniu głównego formularza. Osiągasz to, podtykając swoją widoczną właściwość false, ale robisz to za pomocą struktury 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

Proszę podać kilka szczegółów na temat kodu i dlaczego skomentowałeś dużą jego część, aby ułatwić innym osobom zrozumienie tego kodu –

Powiązane problemy