2011-11-21 36 views
6

Tôi muốn tạo một phiên bản JFrame và trên nhấp chuột minimize button của nó, tôi muốn ẩn nó vào System Tray thường là taskbar của cửa sổ.Làm cách nào để bẫy sự kiện thu nhỏ cửa sổ?

Tôi muốn biết rằng bằng cách sử dụng SystemTray lớp học trong gói java.awt Tôi có thể làm như vậy nhưng tôi cũng không nhận được bất kỳ hướng dẫn nào về nó cũng như bất kỳ ví dụ về chương trình làm việc nào.

Tôi đã đặt câu hỏi này ở đây để nhận liên kết đến trang web hướng dẫn cho lớp học SystemTray hoặc nếu bất kỳ cơ thể nào biết cách bẫy sự kiện thu nhỏ cửa sổ, ví dụ làm việc.

+2

có thể cả hai liên kết sẽ giúp http://download.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html và http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/ – HRgiger

Trả lời

4

Điều này sẽ bẫy sự kiện thu nhỏ cửa sổ và sẽ tạo biểu tượng khay. Nó cũng sẽ loại bỏ các cửa sổ từ thanh tác vụ và nó sẽ thêm một người nghe vào biểu tượng khay để một mouseclick sẽ khôi phục lại cửa sổ. Mã này là một chút rời rạc nhưng phải đủ tốt cho mục đích học tập của bạn:

public class Qwe extends JFrame { 

public static void main(String[] args) { 
    final Qwe qwe = new Qwe(); 

    qwe.addWindowStateListener(new WindowStateListener() { 
     public void windowStateChanged(WindowEvent e) { 
      if (e.getNewState() == ICONIFIED) { 
       try { 
        final TrayIcon trayIcon = new TrayIcon(new ImageIcon("/usr/share/icons/gnome/16x16/emotes/face-plain.png").getImage()); 
        trayIcon.addMouseListener(new MouseAdapter() { 
         @Override 
         public void mouseClicked(MouseEvent e) { 
          qwe.setVisible(true); 
          SystemTray.getSystemTray().remove(trayIcon); 
         } 
        }); 
        SystemTray.getSystemTray().add(trayIcon); 
        qwe.setVisible(false); 
       } catch (AWTException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     } 
    }); 
    qwe.setSize(200, 200); 
    qwe.setVisible(true); 
} 

} 
5

Giao diện WindowListenerJFrame 's addWindowListener() phương pháp này sẽ giúp bạn xác định khi khung đã được giảm thiểu.

+0

+1, sạch hơn .... –

2

cách tốt nhất sẽ được tạo ra sau

1) SystemTray

2) thêm JPopopMenu đến SystemTray's Icon

3) đặt DefaultCloseOperation cho TopLevelContainer (trong trường hợp của bạn JFrame)

  • bằng cách sử dụng WindowListenersetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  • trong các trường hợp khác luôn luôn làm việc setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

  • thông báo đừng quên tuyên bố System.exit(1) đến SystemTray's JpopupMenu, từ JMenuItem hoặc Action/Event khác, vì ở dạng currenet này JVM bao giờ đi từ Hệ điều hành gốc cho đến khi PC tắt nguồn hoặc khởi động lại

+0

cảm ơn lời giải thích từng bước một. –

0
frame.addWindowListener(new WindowAdapter() {@Override 
    public void windowIconified(WindowEvent e) {} 
}); 
Các vấn đề liên quan