Java 在Windows的系统托盘中隐藏我的程序
我想让我的程序在Windows时钟附近的任务栏状态区域显示一个图标,并找到了一种方法 问题是,如果在窗口上按了“X”,我希望我的程序在状态区域保持打开状态,但在系统托盘中没有,但我不知道如何做,在谷歌上搜索也没有帮助(我可能没有搜索正确的术语)Java 在Windows的系统托盘中隐藏我的程序,java,windows,swing,system-tray,Java,Windows,Swing,System Tray,我想让我的程序在Windows时钟附近的任务栏状态区域显示一个图标,并找到了一种方法 问题是,如果在窗口上按了“X”,我希望我的程序在状态区域保持打开状态,但在系统托盘中没有,但我不知道如何做,在谷歌上搜索也没有帮助(我可能没有搜索正确的术语) 编辑:我想我用错了词。我知道如何在通知区域中显示程序图标,我希望将其隐藏在最小化窗口时通常显示的区域。JavaSE v 6中添加了系统托盘支持 您可以在这里看到示例 我猜您希望在最小化主窗体时删除任务栏按钮。您可以通过将其visible属性设置为fals
编辑:我想我用错了词。我知道如何在通知区域中显示程序图标,我希望将其隐藏在最小化窗口时通常显示的区域。JavaSE v 6中添加了系统托盘支持 您可以在这里看到示例
我猜您希望在最小化主窗体时删除任务栏按钮。您可以通过将其visible属性设置为false来实现这一点,但是您可以使用Java框架来实现这一点 我知道如何在通知区域中显示我的程序图标,我想将其隐藏在最小化窗口时通常显示的区域中 然后不要使用系统托盘 问题是,如果按下窗口上的“X”,我希望我的程序在状态区域保持打开状态
系统托盘的正式名称是通知区域(请参阅)。这可能有助于您的搜索。@user786653有趣的是,即使Java实现位于名称系统托盘下。这是raymond及其同事刚刚输掉的一场战斗——以及他们的官方指南如何使用它(这在我看来是一件好事~)Voo:Java实现可以在更多的系统上工作,而不仅仅是Windows,其他窗口管理器采用了术语»系统托盘«……谢谢。我没有看到正确的方法。我想我应该明白,如果让它不可见,它就会隐藏它。请添加一些关于代码的详细信息,以及为什么你注释掉了其中很大一部分,以便其他人更容易理解它
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
public class HideToSystemTray extends JFrame {
TrayIcon trayIcon;
SystemTray tray;
JButton button;
HideToSystemTray() {
super("SystemTray test");
button = new JButton("Press");
button.setBounds(10, 10, 40, 40);
setUndecorated(true);
getContentPane().add(button);
System.out.println("creating instance");
try {
System.out.println("setting look and feel");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
System.out.println("Unable to set LookAndFeel");
}
if (SystemTray.isSupported()) {
System.out.println("system tray supported");
tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png");
ActionListener exitListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Exiting....");
System.exit(0);
}
};
PopupMenu popup = new PopupMenu();
MenuItem defaultItem = new MenuItem("Exit");
defaultItem.addActionListener(exitListener);
popup.add(defaultItem);
defaultItem = new MenuItem("Open");
defaultItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tray.remove(trayIcon);
setVisible(true);
System.out.println("Tray icon removed");
}
});
popup.add(defaultItem);
trayIcon = new TrayIcon(image, "SystemTray Demo", popup);
trayIcon.setImageAutoSize(true);
} else {
System.out.println("system tray not supported");
}
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Execute when button is pressed
System.out.println("You clicked the button");
try {
tray.add(trayIcon);
setVisible(false);
System.out.println("added to SystemTray");
} catch (AWTException ex) {
System.out.println("unable to add to tray");
}
}
});
/* addWindowStateListener(new WindowStateListener() {
public void windowStateChanged(WindowEvent e) {
if(e.getNewState()==ICONIFIED){
try {
tray.add(trayIcon);
setVisible(false);
System.out.println("added to SystemTray");
} catch (AWTException ex) {
System.out.println("unable to add to tray");
}
}
if(e.getNewState()==7){
try{
tray.add(trayIcon);
setVisible(false);
System.out.println("added to SystemTray");
}catch(AWTException ex){
System.out.println("unable to add to system tray");
}
}
if(e.getNewState()==MAXIMIZED_BOTH){
tray.remove(trayIcon);
setVisible(true);
System.out.println("Tray icon removed");
}
if(e.getNewState()==NORMAL){
tray.remove(trayIcon);
setVisible(true);
System.out.println("Tray icon removed");
}
}
}); */
setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png"));
setVisible(true);
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new HideToSystemTray();
}
}