2013-04-27 59 views
2

我創建了從JFrame繼承的通知窗口,但它們在Windows任務欄中顯示爲帶有新圖標。當出現通知時(例如在Skype中,何時發送新消息)突出顯示主應用程序圖標並且不在任務欄中顯示通知窗口的新圖標時,是否可以突出顯示主應用程序圖標?JFrame彈出無任務欄圖標

這裏是彈出代碼:

public class NotificationWindow extends JFrame 
{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    static private int m_count = 0; 

    public NotificationWindow(String text) 
    { 
     super("NotificationWindow"); 
     setLayout(new GridBagLayout()); 

     setSize(300, 70); 
     setLocationRelativeTo(null); 

     setOpacity(0.77f); 
     setUndecorated(true); 
     setResizable(false); 

     add(new JLabel(text)); 

     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent evt) 
      { 
       --m_count; 
      } 
     }); 

     ++m_count; 
    } 

    static public int GetWindowCount() 
    { 
     return m_count; 
    } 

    static public void ShowNotificationWindow(final String text) 
    { 
     // Determine if the GraphicsDevice supports translucency. 
     GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment 
       .getLocalGraphicsEnvironment(); 
     final GraphicsDevice graphicsDevice = graphicsEnvironment 
       .getDefaultScreenDevice(); 

     // If translucent windows aren't supported, exit. 
     if (!graphicsDevice.isWindowTranslucencySupported(TRANSLUCENT)) 
     { 
      System.err.println("Translucency is not supported"); 
      System.exit(0); 
     } 

     JFrame.setDefaultLookAndFeelDecorated(true); 

     // Create the GUI on the event-dispatching thread 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() 
      { 
       NotificationWindow notificationWindow = new NotificationWindow(
         text); 

       Insets scnMax = Toolkit.getDefaultToolkit().getScreenInsets(
         notificationWindow.getGraphicsConfiguration()); 
       int taskBarSize = scnMax.bottom; 
       Rectangle rect = graphicsDevice.getDefaultConfiguration() 
         .getBounds(); 
       int x = (int) rect.getMaxX() - notificationWindow.getWidth(); 
       int y = (int) rect.getMaxY() - notificationWindow.getHeight() 
         - taskBarSize - ((m_count - 1) % 7) 
         * notificationWindow.getHeight(); 
       notificationWindow.setLocation(x, y); 
       notificationWindow.setVisible(true); 
      } 
     }); 
    } 
} 

回答

5

不要延長一個JFrame,而不是延長一個JDialog

一般情況下,任何應用程序應該只有一個單一的JFrame。其他的子窗口應該是JDialogs。請參閱:The Use of Multiple JFrames: Good or Bad Practice?

+0

我只需要突出顯示任務欄圖標,而不是系統托盤鏈接。 – IKM2007 2013-04-27 16:05:22

+1

確保您指定框架作爲對話框的父級。 – camickr 2013-04-27 16:10:53