ในภาษาจาวาถาดงาน(ถาดระบบไอคอน )การแสดงผล/การกระพริบ
ในภาษาจาวาถาดงาน(ถาดระบบส่วนนี้จะแนะนำคลาสยูทิลิตี้สำหรับแสดงและกระพริบไอคอน )
คลาสยูทิลิตี้ถูกเพิ่มเข้ามาเป็นคุณสมบัติใหม่ใน Java SE 6 Mustang java.awt.SystemTray 、java.awt.TrayIcon เราจะใช้คลาสเป็นตัวอย่าง นอกจากนี้เราจะจัดเตรียมแอปพลิเคชันตัวอย่างเพื่อช่วยให้คุณเข้าใจวิธีการใช้งาน
ฟังก์ชันถาดระบบ (ถาดงาน)
ถาดระบบ (ถาดงาน) หมายถึงไอคอนขนาดเล็กที่เรียงกันอยู่มุมล่างขวาของหน้าจอคอมพิวเตอร์ Java SE 6 ได้เพิ่มคลาสต่อไปนี้เพื่อเปิดใช้งานฟังก์ชันถาดระบบ
- java.awt.SystemTray
คลาส SystemTray แสดงถึงถาดระบบบนเดสก์ท็อป - java.awt.TrayIcon
อ็อบเจ็กต์ TrayIcon คือไอคอนถาดระบบที่สามารถเพิ่มลงในถาดระบบได้
วิธีสร้างไอคอนกระพริบ
คุณสามารถใช้เว็บไซต์ต่อไปนี้เพื่อสร้างไอคอนกระพริบได้
อัปโหลดไอคอนในเครื่องเพื่อสร้างไอคอนกระพริบ
https://www.bannerkoubou.com/anime/
ตัวอย่างใบสมัคร

แอปพลิเคชันตัวอย่างนี้ใช้คลาสยูทิลิตี้ถาดระบบ TaskTrayUtil เพื่อใช้งานฟังก์ชันต่อไปนี้
- เมื่อคุณเริ่มใช้งานถาดงานにไอคอนแสดง.
- การคลิก [ปุ่มที่กระพริบ] จะถาดงานทำให้ไอคอนกระพริบ
นอกจากนี้ ยังมีการแสดงข้อความ "ปล่อยฉันออกไปจากที่นี่!!" บนลูกโป่งอีกด้วย - การคลิกปุ่ม [ปิดใช้งาน] จะหยุดการกระพริบของไอคอน
- ถาดงานคลิกไอคอนด้วยการคลิกซ้ายครั้งเดียวเพื่อนำหน้าต่างหลักกลับมาแสดงบนเดสก์ท็อป
- ถาดงานคลิกขวาที่ไอคอนเพื่อแสดงเมนู PopupMenu ตามค่าเริ่มต้น
- เมื่อหน้าต่างหลักถูกย่อลงถาดงานเก็บไว้ใน.
การได้มาซึ่งซอร์สโค้ด
สามารถดาวน์โหลดซอร์สโค้ดได้จากที่อยู่ต่อไปนี้ หากต้องการคอมไพล์ โปรดบันทึกไอคอนต่อไปนี้ไว้ในตำแหน่งเดียวกับซอร์สโค้ดด้วย
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/**
* แสดงและกระพริบไอคอนถาดระบบ (Task Tray/System Tray) โดยใช้ Java
*
* ◆ ภาพรวมของคลาสนี้
* คลาส TaskTray เป็นยูทิลิตี้สำหรับจัดการถาดงาน (Task Tray)
* คุณสมบัติต่อไปนี้มีให้บริการ:
* แสดงไอคอนในถาดระบบ
* ข้อความแจ้งเตือนแบบป๊อปอัพจะปรากฏขึ้นในถาดระบบ
* ทำให้แถบงานกระพริบ
*
* ◆ วิธีการใช้งาน
* ส่งคลาส JFrame เป้าหมายเป็นอาร์กิวเมนต์ให้กับเมธอดต่อไปนี้
* ・createTray(JFrame targetFrame)
* ・createTray(final JFrame targetFrame, Image image, PopupMenu menu)
*
*/
คลาสสาธารณะ TaskTrayUtil {
เฟรม JFrame ส่วนตัวแบบคงที่;
private static PopupMenu defaultMenu;
private static TrayIcon trayIcon;
private static SystemTray tray = SystemTray.getSystemTray();
private static Object INSTANCE_LOCK = new Object();
/**
* ตัวอย่างการใช้งาน
* @param args
*/
public static void main(String[] args) {
พยายาม {
// ตั้งค่า LookAndFeel เป็น Windows
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
// ไอคอนมาตรฐาน
final Image img = new ImageIcon(
TaskTrayUtil.class.getResource(
“tray_icon.gif”)).getImage();
เฟรม JFrame สุดท้าย =
สร้าง JFrame ใหม่ ("แสดงและกระพริบไอคอนในถาดระบบ");
frame.setSize(300, 100);
frame.setIconImage(img);
// เมื่อย่อหน้าต่างแล้ว ให้ย่อหน้าต่างลงไปที่ถาดงาน
// เพิ่มคลาส WindowListener ตามที่แสดงไว้
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));
// ไอคอนกระพริบ
ภาพสุดท้าย imgLight =
ไอคอนรูปภาพใหม่ (TaskTrayUtil.class.getResource(
“tray_icon_light.gif”)).getImage();
JButton lightButton = new JButton(“点滅”);
ปุ่มไฟ.เพิ่ม ActionListener(ใหม่ ActionListener(){
public void actionPerformed(ActionEvent e) {
onAndOffLight(imgLight, null);
displayMessage("ข้อความ", "ปล่อยฉันออกไปจากที่นี่!!");
}
});
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);
// การประมวลผลเมื่อสิ้นสุดรอบการทำงาน
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// แสดงกรอบภาพไว้ตรงกลางหน้าจอ
เฟรม.ตั้งค่าตำแหน่งสัมพัทธ์กับ (null);
// สร้างถาดงาน
TaskTrayUtil.createTray(frame);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
static {
createPopupMenu();
}
/**
* สร้างเมนู PopupMenu เริ่มต้นเพื่อแสดงในถาดระบบ
* เมนูอาหารต่อไปนี้มีให้บริการ
* ลบออกจากแถบงาน
* ลบแอปพลิเคชันเป้าหมายออกจากแถบงาน แล้วย้ายไปยังเดสก์ท็อป
*นำออกไป
* (เปิดใช้งานหน้าต่างและนำมาไว้ด้านหน้า)
* การดำเนินการนี้จะทำให้แอปพลิเคชันถูกปิดลง
*/
private static void createPopupMenu() {
MenuItem getTrayItem = new MenuItem(“タスクトレイから取り出す”);
getTrayItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
คล่องแคล่ว();
}
});
MenuItem exitItem = new MenuItem(“終了”);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
removeTrayIcon();
TaskTrayUtil.frame.setVisible(false);
TaskTrayUtil.frame.dispose();
ระบบออก(0);
}
});
defaultMenu = new PopupMenu();
defaultMenu.add(getTrayItem);
defaultMenu.add(exitItem);
}
/**
* สร้างไอคอนถาดระบบและเพิ่มลงในถาดระบบ
* ตัวรับฟังเหตุการณ์ที่เกิดขึ้นบนไอคอนจะถูกตั้งค่าเป็น targetFrame
ตั้งค่าเป็น *.
* เหตุการณ์นี้เกิดขึ้นเมื่อดับเบิ้ลคลิกที่ไอคอนในถาดระบบ
* ดึงข้อมูลแอปพลิเคชันเป้าหมาย
* @param targetFrame แอปพลิเคชันเป้าหมาย
*/
public static void createTray(JFrame targetFrame) {
createTray(targetFrame, null, null);
}
/**
* สร้างไอคอนถาดระบบและเพิ่มลงในถาดระบบ
*
* @param targetFrame แอปพลิเคชันเป้าหมาย
* @param image รูปภาพที่จะแสดงเป็นไอคอนในถาดระบบ
* หากเป็นค่าว่าง สามารถรับค่าได้จาก targetFrame โดยใช้ getIconImage()
* ภาพประกอบใช้เพื่อเป็นตัวอย่างเท่านั้น
* @param menu เมนูแบบป๊อปอัพที่จะแสดงในถาดระบบ
* หากค่าเป็น null จะแสดง PopupMenu ตามค่าเริ่มต้น
*/
public static void createTray(final JFrame targetFrame, Image image,
เมนูแบบป๊อปอัพ) {
// ออกจากโปรแกรมหากระบบถาดไม่รองรับ
หาก SystemTray ไม่รองรับ {
กลับ;
}
TaskTrayUtil.frame = targetFrame;
ถ้า (ภาพ == null) {
image = targetFrame.getIconImage();
}
ถ้า (เมนู == null) {
เมนู = เมนูเริ่มต้น;
}
trayIcon = new TrayIcon(image, targetFrame.getTitle(), menu);
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
ถ้า (SwingUtilities.isLeftMouseButton(e)) {
คล่องแคล่ว();
}
}
});
พยายาม {
tray.add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}
}
/**
* ลบไอคอนออกจากแถบงาน
* ต้องเรียกฟังก์ชันนี้เมื่อแอปพลิเคชันปิดตัวลง
*/
public static void removeTrayIcon() {
tray.remove(trayIcon);
}
/**
* ทำให้ไอคอนในแถบงานกระพริบ
* @param msg หากจำเป็น เมื่อคลิกไอคอนที่กระพริบ
* ตั้งค่าข้อความที่จะแสดง
*/
public static void onAndOffLight(Image lightImg, String msg) {
แทนที่รูปภาพ (lightImg);
ChangeLightImgAdapter adap =
ใหม่ TaskTrayUtil().new ChangeLightImgAdapter(msg);
trayIcon.addMouseListener(adap);
frame.addWindowListener(adap);
}
/**
* เปลี่ยนไอคอนในแถบงาน
* @param image เปลี่ยนเฉพาะเมื่อไอคอนแตกต่างจากไอคอนปัจจุบันเท่านั้น
*/
public static void replaceImage(Image image) {
ซิงโครไนซ์ (INSTANCE_LOCK) {
ถ้า (!image.equals(trayIcon.getImage())) {
trayIcon.setImage(image);
}
}
}
/**
* เปลี่ยนไอคอนในแถบงาน
* หากไอคอนกะพริบด้วยเหตุผลใดก็ตาม
ดูเหมือนว่าต้องลบโดยใช้ {@link SystemTray#remove(TrayIcon)})
* @param image เปลี่ยนเฉพาะเมื่อไอคอนแตกต่างจากไอคอนปัจจุบันเท่านั้น
*/
public static void replaceImageWithDelete(Image image) {
ซิงโครไนซ์ (INSTANCE_LOCK) {
ถ้า (!image.equals(trayIcon.getImage())) {
tray.remove(trayIcon);
trayIcon.setImage(image);
พยายาม {
tray.add(trayIcon);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* ข้อความแจ้งเตือนแบบป๊อปอัพจะปรากฏขึ้นในแถบงาน
* @param caption
* @param text
*/
public static void displayMessage(String caption, String text) {
if (caption != null || text != null) {
trayIcon.displayMessage(caption, text,
TrayIcon.MessageType.INFO);
}
}
/**
* ลบแอปพลิเคชันเป้าหมายออกจากแถบงาน แล้วย้ายไปยังเดสก์ท็อป
*นำออกไป
*/
private static void active() {
// คืนค่าสถานะของเฟรมให้เป็นปกติ
TaskTrayUtil.frame.setExtensedState(JFrame.NORMAL);
TaskTrayUtil.frame.setAlwaysOnTop(true);
TaskTrayUtil.frame.setVisible(true);
TaskTrayUtil.frame.setAlwaysOnTop(false);
}
/**
* เหตุการณ์ที่เกิดขึ้นเมื่อคลิกไอคอนที่กะพริบ
* คลาสผู้ฟัง
*/
คลาส ChangeLightImgAdapter ใช้ WindowListener, MouseListener {
สตริง lightImageText;
public ChangeLightImgAdapter(String lightImageText) {
this.lightImageText = lightImageText;
}
/**
* เมื่อคลิกไอคอนถาดระบบ
* แสดงข้อความป๊อปอัพ
*/
public void mousePressed(MouseEvent e) {
TaskTrayUtil.displayMessage(null, lightImageText);
}
/**
* ไฟจะกะพริบเมื่อแอปพลิเคชันเป้าหมายเริ่มทำงาน
* กู้คืนไอคอน
*/
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) {}
}
}
