gpt4 book ai didi

java - setDefaultCloseOperation(HIDE_ON_CLOSE) 和系统托盘图标

转载 作者:太空宇宙 更新时间:2023-11-04 13:51:10 27 4
gpt4 key购买 nike

关闭应用程序后如何显示我创建的java应用程序?我的意思是我想关闭我制作的应用程序,之后它仍然在后台进程(托盘)上运行,我做到了,但是在我双击托盘图标后如何使应用程序再次显示(弹出)?有人可以帮助我吗?

public MainMenu(String access) {

this.access = access;
initComponents();
customInit();
this.setLocationRelativeTo(null);
this.setExtendedState(this.MAXIMIZED_BOTH);
requestJobList("ALL");
setDefaultCloseOperation(HIDE_ON_CLOSE);
createReminder();
}



private void customInit(){

joblistTable.setCellSelectionEnabled(rootPaneCheckingEnabled);

}

private void createReminder(){

String icoPath = "C:/Users/user/Documents/NetBeansProjects/MOADesktopBaru/src/com/mayora/image/MOA.PNG";

if(!SystemTray.isSupported()){
System.out.println("System tray is not supported !!! ");
return ;
}
//get the systemTray of the system
SystemTray systemTray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage(icoPath);

//popupmenu
PopupMenu trayPopupMenu = new PopupMenu();


//1t menuitem for popupmenu
MenuItem setting = new MenuItem("Setting");
setting.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {

SettingFrame SF = new SettingFrame ();
jDesktopPane.add(SF);
SF.show();
}
});
trayPopupMenu.add(setting);

//2nd menuitem of popupmenu
MenuItem close = new MenuItem("Close");
close.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
trayPopupMenu.add(close);

//setting tray icon
TrayIcon trayIcon = new TrayIcon(image, "MOA Desktop", trayPopupMenu);
//adjust to default size as per system recommendation
trayIcon.setImageAutoSize(true);

trayIcon.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2)
{
initComponents();
customInit();
setExtendedState(MAXIMIZED_BOTH);
requestJobList("ALL");
setDefaultCloseOperation(EXIT_ON_CLOSE);

}
}
});

try{
systemTray.add(trayIcon);
}catch(AWTException awtException){
awtException.printStackTrace();
}

}

最佳答案

我认为 setDefaultCloseOperation(EXIT_ON_CLOSE); 不应放置在托盘图标监听器内。

为了能够通过双击托盘图标再次显示您的应用,只需将以下行添加到 mouseClicked() 方法:

setVisible(true);

请注意,您再次可见的是 JFrame,因此如果您需要指定它,只需将其添加到 setVisible(true) 方法之前即可。顺便说一句,由于应用程序已经执行(在后台),因此您不需要再次调用 initComponents() 方法。

另一个建议,不要使用mouseClicked()方法。使用 MouseListener Interface 中的 mousePressed()反而。为什么?有时,您单击的速度太快,以至于应用程序检测到 mouseDragged 事件,因此单击不算数。如果您使用mousePressed(),则可以保证它检测到两次点击。

关于java - setDefaultCloseOperation(HIDE_ON_CLOSE) 和系统托盘图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30254896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com