Trong JavaKhay tác vụ(khay hệ thống) biểu tượngHiển thị/Nhấp nháy
Trong JavaKhay tác vụ(khay hệ thốngPhần này giới thiệu một lớp tiện ích để hiển thị và nhấp nháy biểu tượng ).
Các lớp tiện ích đã được thêm vào như một tính năng mới trong Java SE 6 Mustang. java.awt.SystemTray 、java.awt.TrayIcon Chúng ta sẽ sử dụng một lớp. Một ứng dụng mẫu cũng sẽ được cung cấp để giúp bạn hiểu cách sử dụng.
Chức năng khay hệ thống (khay tác vụ)
Khay hệ thống (khay tác vụ) là tập hợp các biểu tượng nhỏ được sắp xếp ở góc dưới bên phải màn hình máy tính. Java SE 6 đã bổ sung các lớp sau để kích hoạt chức năng khay hệ thống.
- java.awt.SystemTray
Lớp SystemTray đại diện cho khay hệ thống trên màn hình máy tính. - java.awt.TrayIcon
Đối tượng TrayIcon đại diện cho một biểu tượng khay hệ thống có thể được thêm vào khay hệ thống.
Cách tạo biểu tượng nhấp nháy
Bạn có thể sử dụng trang web sau để tạo biểu tượng nhấp nháy.
Tải lên biểu tượng cục bộ để tạo biểu tượng nhấp nháy.
https://www.bannerkoubou.com/anime/
Ví dụ ứng dụng

Ứng dụng mẫu sử dụng lớp tiện ích khay hệ thống TaskTrayUtil để thực hiện các chức năng sau:
- Khi bạn khởi động nóKhay tác vụにbiểu tượngTrưng bày.
- Nhấp vào [nút nhấp nháy] sẽKhay tác vụLàm cho biểu tượng nhấp nháy.
Trên một quả bóng bay cũng hiển thị dòng chữ "Hãy thả tôi ra khỏi đây!!" - Nhấn vào nút [Tắt] sẽ khiến biểu tượng ngừng nhấp nháy.
- Khay tác vụNhấp chuột trái một lần vào biểu tượng để đưa cửa sổ chính lên màn hình nền.
- Khay tác vụNhấp chuột phải vào biểu tượng để hiển thị menu bật lên mặc định.
- Khi cửa sổ chính được thu nhỏKhay tác vụĐược lưu trữ tại.
Thu thập mã nguồn
Mã nguồn có thể được tải xuống từ địa điểm sau. Nếu bạn muốn biên dịch, vui lòng lưu thêm biểu tượng sau vào cùng vị trí với mã nguồn.
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/**
* Hiển thị và nhấp nháy biểu tượng khay tác vụ (khay hệ thống) bằng Java.
*
* ◆ Tổng quan về lớp học này
* Lớp TaskTray là một tiện ích để xử lý khay tác vụ.
* Các tính năng sau đây được cung cấp:
* Hiển thị biểu tượng trong khay hệ thống.
* Một thông báo bật lên sẽ xuất hiện trong khay tác vụ.
* Làm cho khay tác vụ nhấp nháy.
*
* ◆ Cách sử dụng
* Truyền lớp JFrame mục tiêu làm đối số cho phương thức sau.
* ・createTray(JFrame targetFrame)
* ・createTray(final JFrame targetFrame, Image image, PopupMenu menu)
*
*/
public class TaskTrayUtil {
privatestatic JFrame frame;
private static PopupMenu defaultMenu;
private static TrayIcon trayIcon;
private static SystemTray tray = SystemTray.getSystemTray();
private static Object INSTANCE_LOCK = new Object();
/**
* Ví dụ thực thi
* @param args
*/
public static void main(String[] args) {
thử {
// Đặt giao diện người dùng thành Windows
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
// Biểu tượng tiêu chuẩn
final Image img = new ImageIcon(
TaskTrayUtil.class.getResource(
“tray_icon.gif”)).getImage();
khung JFrame cuối cùng =
new JFrame("Hiển thị và nhấp nháy biểu tượng trong khay tác vụ");
frame.setSize(300, 100);
frame.setIconImage(img);
// Thu nhỏ cửa sổ xuống khay hệ thống khi nó được thu nhỏ.
// Thêm lớp WindowListener như hình minh họa.
frame.addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
frame.setVisible(false);
}
});
JPanel jPanel = new JPanel();
jPanel.setLayout(new FlowLayout());
jPanel.setSize(new Dimension(219, 70));
// Biểu tượng nhấp nháy
Hình ảnh cuối cùng imgLight =
new ImageIcon(TaskTrayUtil.class.getResource(
“tray_icon_light.gif”)).getImage();
JButton lightButton = new JButton(“点滅”);
lightButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
onAndOffLight(imgLight, null);
displayMessage("Thông báo", "Hãy thả tôi ra khỏi đây!!");
}
});
JButton cancelButton = new JButton(“解除”);
cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
replaceImageWithDelete(img);
}
});
jPanel.add(lightButton, null);
jPanel.add(cancelButton, null);
frame.add(jPanel);
// Xử lý cuối chu kỳ.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Hiển thị khung hình ở giữa màn hình.
frame.setLocationRelativeTo(null);
// Tạo khay tác vụ.
TaskTrayUtil.createTray(frame);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
tĩnh {
createPopupMenu();
}
/**
* Tạo menu PopupMenu mặc định để hiển thị trong khay tác vụ.
* Các món ăn sau đây hiện có sẵn.
* Xóa khỏi thanh tác vụ
* Gỡ bỏ ứng dụng cần nhắm mục tiêu khỏi thanh tác vụ và đưa nó lên màn hình nền.
* Lấy nó ra.
* (Kích hoạt cửa sổ và đưa nó lên phía trước.)
* Thao tác này sẽ chấm dứt ứng dụng cần đóng.
*/
private static void createPopupMenu() {
MenuItem getTrayItem = new MenuItem(“タスクトレイから取り出す”);
getTrayItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tích cực();
}
});
MenuItem exitItem = new MenuItem(“終了”);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
removeTrayIcon();
TaskTrayUtil.frame.setVisible(false);
TaskTrayUtil.frame.dispose();
System.exit(0);
}
});
defaultMenu = new PopupMenu();
defaultMenu.add(getTrayItem);
defaultMenu.Add(exitItem);
}
/**
* Tạo biểu tượng khay hệ thống và thêm nó vào khay hệ thống.
* Các trình lắng nghe sự kiện xảy ra trên biểu tượng được đặt thành targetFrame
Đặt thành *.
* Sự kiện này xảy ra khi biểu tượng trên khay hệ thống được nhấp đúp.
* Truy xuất ứng dụng mục tiêu.
* @param targetFrame Ứng dụng mục tiêu
*/
public static void createTray(JFrame targetFrame) {
createTray(targetFrame, null, null);
}
/**
* Tạo biểu tượng khay hệ thống và thêm nó vào khay hệ thống.
*
* @param targetFrame Ứng dụng mục tiêu
* @param image Hình ảnh hiển thị làm biểu tượng khay hệ thống.
* Nếu là null, nó có thể được lấy từ targetFrame bằng cách sử dụng getIconImage().
* Hình ảnh được sử dụng chỉ nhằm mục đích minh họa.
* @param menu Menu bật lên để hiển thị trong khay tác vụ.
* Nếu là null, menu bật lên mặc định sẽ được hiển thị.
*/
public static void createTray(final JFrame targetFrame, Image image,
Menu bật lên (PopupMenu) {
// Thoát nếu khay hệ thống không được hỗ trợ.
nếu (!SystemTray.isSupported()) {
trở lại;
}
TaskTrayUtil.frame = targetFrame;
nếu (hình ảnh == null) {
image = targetFrame.getIconImage();
}
nếu (menu == null) {
menu = defaultMenu;
}
trayIcon = new TrayIcon(image, targetFrame.getTitle(), menu);
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
nếu (SwingUtilities.isLeftMouseButton(e)) {
tích cực();
}
}
});
thử {
tray.add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}
}
/**
* Xóa biểu tượng khỏi thanh tác vụ.
* Hàm này phải được gọi khi ứng dụng kết thúc.
*/
public static void removeTrayIcon() {
tray.remove(trayIcon);
}
/**
* Làm cho biểu tượng trên thanh tác vụ nhấp nháy.
* @param msg Nếu cần, khi biểu tượng nhấp nháy được nhấp vào
* Thiết lập thông báo hiển thị.
*/
public static void onAndOffLight(Image lightImg, String msg) {
replaceImage(lightImg);
ChangeLightImgAdapter adap =
new TaskTrayUtil().new ChangeLightImgAdapter(msg);
trayIcon.addMouseListener(adap);
frame.addWindowListener(adap);
}
/**
* Thay đổi biểu tượng trên thanh tác vụ.
* @param image Chỉ thay đổi nếu biểu tượng khác với biểu tượng hiện tại.
*/
public static void replaceImage(Image image) {
đồng bộ (INSTANCE_LOCK) {
nếu (!image.equals(trayIcon.getImage())) {
trayIcon.setImage(image);
}
}
}
/**
* Thay đổi biểu tượng trên thanh tác vụ.
* Nếu biểu tượng nhấp nháy vì lý do nào đó,
Có vẻ như cần phải xóa nó bằng cách sử dụng {@link SystemTray#remove(TrayIcon)}).
* @param image Chỉ thay đổi nếu biểu tượng khác với biểu tượng hiện tại.
*/
public static void replaceImageWithDelete(Image image) {
đồng bộ (INSTANCE_LOCK) {
nếu (!image.equals(trayIcon.getImage())) {
tray.remove(trayIcon);
trayIcon.setImage(image);
thử {
tray.add(trayIcon);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* Một thông báo bật lên sẽ xuất hiện trên thanh tác vụ.
* @param caption
* @param text
*/
public static void displayMessage(String caption, String text) {
if (caption != null || text != null) {
trayIcon.displayMessage(caption, text,
TrayIcon.MessageType.INFO);
}
}
/**
* Gỡ bỏ ứng dụng cần nhắm mục tiêu khỏi thanh tác vụ và đưa nó lên màn hình nền.
* Lấy nó ra.
*/
private static void active() {
// Khôi phục trạng thái khung hình về bình thường.
TaskTrayUtil.frame.setExtendsState(JFrame.NORMAL);
TaskTrayUtil.frame.setAlwaysOnTop(true);
TaskTrayUtil.frame.setVisible(true);
TaskTrayUtil.frame.setAlwaysOnTop(false);
}
/**
* Sự kiện sẽ được kích hoạt khi biểu tượng nhấp nháy được nhấp chuột.
* Lớp người nghe.
*/
lớp ChangeLightImgAdapter triển khai WindowListener, MouseListener {
Chuỗi lightImageText;
public ChangeLightImgAdapter(String lightImageText) {
this.lightImageText = lightImageText;
}
/**
* Khi biểu tượng khay tác vụ được nhấp vào
* Hiển thị thông báo dạng cửa sổ bật lên.
*/
public void mousePressed(MouseEvent e) {
TaskTrayUtil.displayMessage(null, lightImageText);
}
/**
* Đèn nhấp nháy khi ứng dụng mục tiêu được kích hoạt.
* Khôi phục biểu tượng.
*/
public void windowActivated(WindowEvent e) {
TaskTrayUtil.replaceImageWithDelete(TaskTrayUtil.frame
.getIconImage());
TaskTrayUtil.frame.removeWindowListener(this);
TaskTrayUtil.trayIcon.removeMouseListener(this);
}
public void windowClosed(WindowEvent e) {}
public void windowClosing(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
}
