基于java開發(fā)之系統(tǒng)托盤的應(yīng)用
項(xiàng)目結(jié)構(gòu):
運(yùn)行效果:
========================================================================
下面是代碼部分:
========================================================================
/tray/src/com/b510/tray托盤/DesktopCapture.java
package com.b510.tray托盤;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
public class DesktopCapture extends JFrame implements ActionListener {
/**
* 1.改變雙擊托盤截圖為單擊托盤截圖 2.修復(fù)了托盤后無反應(yīng)BUG 3.將放大鏡提示框移至左上角和右上角
*/
private static final long serialVersionUID = 1L;
// JButton confirm;
// BufferedImage desktopImg;
MyTray tray;
boolean iconed = false;
public DesktopCapture() {
super("EasyCapture");
init();
// 當(dāng)點(diǎn)擊"-"最小化按鈕時(shí),系統(tǒng)會(huì)最小化到托盤
addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
iconed = true;
setVisible(false);
}
// 當(dāng)點(diǎn)擊"X"關(guān)閉窗口按鈕時(shí),會(huì)詢問用戶是否要最小化到托盤
// 是,表示最小化到托盤,否,表示退出
public void windowClosing(WindowEvent e) {
int option = JOptionPane.showConfirmDialog(DesktopCapture.this,
"是否最小化到托盤?", "提示:", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
iconed = true;
setVisible(false);
} else {
System.exit(0);
}
}
});
pack();
setSize(350, 230);
setLocation(500, 300);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);
setVisible(true);
}
void init() {
tray = new MyTray(DesktopCapture.this);
}
// 截圖
public void capture() {
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
DesktopCapture desk = new DesktopCapture();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
/tray/src/com/b510/tray托盤/MyTray.java
package com.b510.tray托盤;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class MyTray implements ActionListener, MouseListener {
private Image icon;// 圖標(biāo)
private TrayIcon trayIcon;
private SystemTray systemTray;// 系統(tǒng)托盤
private DesktopCapture frame; // 托盤所屬主窗體
private PopupMenu pop = new PopupMenu(); // 彈出菜單
private MenuItem capture = new MenuItem("capture");
private MenuItem show = new MenuItem("open");
private MenuItem exit = new MenuItem("exit");
public MyTray(DesktopCapture frame) {
this.frame = frame;
// icon = Toolkit.getDefaultToolkit().getImage("./images/xiaomai.png");
icon = new ImageIcon(this.getClass().getClassLoader().getResource(
"image/xiaomai.png")).getImage();
if (SystemTray.isSupported()) {
systemTray = SystemTray.getSystemTray();
trayIcon = new TrayIcon(icon, "單擊直接截圖-EasyCapture", pop);
pop.add(capture);
pop.add(show);
pop.add(exit);
try {
systemTray.add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
trayIcon.addMouseListener(this);
}
}
trayIcon.addMouseListener(this);
show.addActionListener(this);
exit.addActionListener(this);
capture.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == show) {
frame.iconed = false;
frame.setVisible(true);
frame.setExtendedState(JFrame.NORMAL);
} else if (e.getSource() == capture) {
frame.capture();
} else {
System.exit(0);
}
}
// ����¼�
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1 && e.getButton() != MouseEvent.BUTTON3) {
frame.capture();
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
相關(guān)文章
Java 8 Stream 的終極技巧——Collectors 功能與操作方法詳解
這篇文章主要介紹了Java 8 Stream Collectors 功能與操作方法,結(jié)合實(shí)例形式詳細(xì)分析了Java 8 Stream Collectors 功能、操作方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05datax-web在windows環(huán)境idea中模塊化打包部署操作步驟
這篇文章主要介紹了datax-web在windows環(huán)境idea中模塊化打包部署操作步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05sql于navicat中能運(yùn)行在mybatis中不能運(yùn)行的解決方案
這篇文章主要介紹了sql于navicat中能運(yùn)行在mybatis中不能運(yùn)行的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01JDK源碼分析之String、StringBuilder和StringBuffer
這篇文章主要給大家介紹了關(guān)于JDK源碼分析之String、StringBuilder和StringBuffer的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用jdk具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05Spring Boot開啟遠(yuǎn)程調(diào)試的方法
這篇文章主要介紹了Spring Boot開啟遠(yuǎn)程調(diào)試的方法,幫助大家更好的理解和使用Spring Boot框架,感興趣的朋友可以了解下2020-10-10@DynamicUpdate //自動(dòng)更新updatetime的問題
這篇文章主要介紹了@DynamicUpdate //自動(dòng)更新updatetime的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Spring Boot多模塊化后,服務(wù)間調(diào)用的坑及解決
這篇文章主要介紹了Spring Boot多模塊化后,服務(wù)間調(diào)用的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java Web 實(shí)現(xiàn)QQ登錄功能一個(gè)帳號(hào)同一時(shí)間只能一個(gè)人登錄
對(duì)于一個(gè)帳號(hào)在同一時(shí)間只能一個(gè)人登錄,下文給大家介紹的非常詳細(xì),對(duì)java web qq 登錄功能感興趣的朋友一起看看吧2016-11-11Spring實(shí)戰(zhàn)之類級(jí)別緩存實(shí)現(xiàn)與使用方法
這篇文章主要介紹了Spring實(shí)戰(zhàn)之類級(jí)別緩存實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了Spring類級(jí)別緩存配置、屬性、領(lǐng)域模型等相關(guān)操作技巧,需要的朋友可以參考下2020-01-01