바탕 화면의 시스템 트레이는 프로그램이 최소화되거나 닫기 버튼을 눌러도 프로그램이 종료되지 않고, 대신 작업 상태 영역(Windows 시스템)에서 아이콘을 클릭하면 최소화된다는 의미입니다. 영역에는 프롬프트와 기타 작업이 있습니다. Microsoft Windows에서는 "작업 표시줄 상태 영역", Gnome에서는 "알림 영역", KDE에서는 "시스템 트레이" 트레이라고 합니다. 시스템 트레이는 데스크탑에서 실행되는 모든 응용 프로그램에서 공유됩니다.
구현을 위해 두 개의 새로운 클래스가 jdk1.6에 추가되었습니다.
SystemTray 및 TrayIcon에 대한 자세한 소개는 다음과 같습니다.
시스템트레이
수업 소개:
일부 플랫폼에서는 시스템 트레이가 존재하지 않거나 지원되지 않을 수 있으므로 먼저 SystemTray.isSupported()를 사용하여 현재 시스템이 시스템 트레이를 지원하는지 확인하십시오.
SystemTray는 add(java.awt.TrayIcon) 메소드를 사용하여 트레이에 추가할 수 있는 하나 이상의 TrayIcon을 포함할 수 있습니다. 트레이가 더 이상 필요하지 않은 경우 제거(java.awt.TrayIcon)를 사용하십시오.
제거하세요.
TrayIcon은 이미지, 팝업 메뉴 및 관련 리스너 세트로 구성됩니다. 모든 Java 응용 프로그램에는 응용 프로그램이 실행되는 동안 응용 프로그램이 데스크톱 시스템 트레이에 대한 연결을 설정할 수 있도록 하는 SystemTray 인스턴스가 있습니다.
SystemTray 인스턴스는 getSystemTray() 메서드를 통해 얻을 수 있습니다. 응용 프로그램이 자체 SystemTray를 만들 수 없습니다.
다음과 같이 코드 코드를 복사합니다.
import java.awt.AWTException;
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.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
/**
*
* @저자 Mr.LiuTao
*/
공개 클래스 TrayByJdk는 JFrame을 확장하여 ActionListener를 구현합니다.
개인 JPanel 창 = null;
private JButton 버튼 = null; // 트레이 아이콘을 시작하는 버튼
private JLabel label = null; // 시스템이 트레이를 지원하는지 여부에 대한 정보를 표시하는 데 사용됩니다.
private TrayIcon 트레이 아이콘 = null;
개인 타이머 shanshuo = null;
개인 ImageIcon icon1 = null;
개인 ImageIcon icon2 = null;
private SystemTray 트레이 = null; //이 운영 체제 트레이의 인스턴스
부울 겐가이 = false;
//jdk1.6의 트레이 기술을 사용하여 크로스 플랫폼 애플리케이션 구현
공개 TrayByJdk() {
//super("팔레트 기술 시연");
icon1 = new ImageIcon("G://javaworks//eclipsework//shanzhaiQQClient//images//16.gif") // 트레이에 표시할 아이콘
icon2 = new ImageIcon("G://javaworks//eclipsework//shanzhaiQQClient//images//15.gif") // 트레이에 표시할 아이콘
노력하다 {
// LookAndFeel을 Windows 스타일로 설정
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (예외예외) {
ex.printStackTrace();
}
창 = new JPanel();
버튼 = new JButton("트레이로 축소");
버튼.setEnabled(false);
label = new JLabel("이 운영 체제는 해당 트레이를 지원하지 않습니다.");
Pane.add(레이블);
창.추가(버튼);
//트레이가 지원되는지 확인
if (SystemTray.isSupported()) {
this.tray();
}
shanshuo = 새 타이머(1000,this);
shanshuo.start();
this.getContentPane().add(pane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.addWindowStateListener(new WindowStateListener () {
공개 무효 windowStateChanged(WindowEvent 상태) {
if(state.getNewState() == 1 || state.getNewState() == 7) {
잉카();
}
}
});
this.setVisible(false);
System.out.println("=============="+this.isVisible());
}
/**
* 팔레트 관련 코드
*/
개인 무효 트레이() {
label.setText("이 운영 체제는 트레이를 지원합니다.");
버튼.setEnabled(true);
Tray = SystemTray.getSystemTray(); // 이 운영 체제의 트레이 인스턴스를 가져옵니다.
//ImageIcon icon = new ImageIcon("tray.gif"); //트레이에 표시할 아이콘
PopupMenu pop = new PopupMenu(); // 마우스 오른쪽 버튼 클릭 팝업 메뉴 구성
MenuItem show = new MenuItem("창 표시");
MenuItem exit = new MenuItem("프레젠테이션 종료");
MenuItem 작성자 = new MenuItem("저자");
/**
* TrayIcon은 세 가지 구조를 가지고 있습니다.
* TrayIcon(이미지 이미지)는 "icon"으로 구성됩니다.
* TrayIcon(이미지 이미지, 문자열 툴팁)은 "icon"과 "ToolTip"으로 구성됩니다.
* TrayIcon(이미지 이미지, 문자열 도구 설명, PopupMenu 팝업)은 "아이콘", "도구 설명" 및 "팝업 메뉴"를 사용하여 트레이 아이콘을 구성합니다.
*/
TrayIcon = new TrayIcon(icon1.getImage(), "트레이 기술 시연", pop);
// 이 버튼을 클릭하면 창이 닫히고 시스템 트레이에 트레이 아이콘이 추가됩니다.
버튼.addActionListener(새 ActionListener() {
공공 무효 actionPerformed(ActionEvent e) {
노력하다 {
Tray.add(trayIcon); // 시스템 트레이 인스턴스에 트레이 아이콘을 추가합니다.
setVisible(false); //창을 보이지 않게 만듭니다.
} catch (AWTException ex) {
ex.printStackTrace();
}
}
});
/**
* 마우스 리스너를 추가합니다. 마우스가 트레이 아이콘을 두 번 클릭하면 기본적으로 창이 표시됩니다.
*/
TrayIcon.addMouseListener(new MouseAdapter() {
공공 무효 mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) { // 마우스 더블클릭
Tray.remove(trayIcon); // 시스템 트레이 인스턴스에서 트레이 아이콘을 제거합니다.
setVisible(true); // 표시 창
}
}
});
show.addActionListener(new ActionListener() { // "창 표시" 메뉴를 클릭하여 창을 표시합니다.
공공 무효 actionPerformed(ActionEvent e) {
Tray.remove(trayIcon); // 시스템 트레이 인스턴스에서 트레이 아이콘을 제거합니다.
setVisible(true); // 표시 창
}
});
exit.addActionListener(new ActionListener() { // "Exit Demo" 메뉴를 클릭하여 프로그램을 종료합니다.
공공 무효 actionPerformed(ActionEvent e) {
System.exit(0); //프로그램 종료
}
});
author.addActionListener(new ActionListener() { // "Exit Demo" 메뉴를 클릭하여 프로그램을 종료합니다.
공공 무효 actionPerformed(ActionEvent e) {
쇼메시지();
}
});
pop.add(표시);
pop.add(exit);
pop.add(저자);
}
/**
* 디스플레이 정보
*/
개인 무효 showMessage() {
JOptionPane.showMessageDialog(this, new JLabel("시스템 트레이입니다."), "메시지", JOptionPane.INFORMATION_MESSAGE);
}
공개 정적 무효 메인(String[] args) {
새로운 TrayByJdk().yinca();
}
공개 무효 yinca(){
노력하다 {
트레이.추가(트레이아이콘);
} 잡기(AWTException e) {
// TODO 자동 생성된 캐치 블록
e.printStackTrace();
} // 시스템의 트레이 인스턴스에 트레이 아이콘을 추가합니다.
setVisible(false); //창을 보이지 않게 합니다.
}
@보수
공개 무효 actionPerformed(ActionEvent arg0) {
if(!gengai){
TrayIcon.setImage(icon2.getImage());
겐가이 = 사실;
}또 다른{
TrayIcon.setImage(icon1.getImage());
겐가이 = 거짓;
}
}
}