我希望我的程序在Windows中靠近时钟的TaskBar状态区域中显示一个图标,并找到了一种方法。
问题是,我希望我的程序在状态区域保持打开状态,如果在窗口上按下“X”,但不在系统托盘中,但我不知道如何这样做并搜索谷歌没有帮助(我可能没有找到合适的条款)。
编辑:我认为我使用了错误的条款。我知道如何在通知区域中显示我的程序图标,我想要的是在最小化窗口时将其隐藏在通常显示的区域。
答案 0 :(得分:7)
我知道如何在通知区域中显示我的程序图标,我想要的是在最小化窗口时将其隐藏在通常显示的区域。
然后不要使用系统托盘。
问题是,如果在窗口上按下“X”,我希望我的程序在状态区保持打开状态,
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
答案 1 :(得分:6)
JavaSE v 6中添加了系统托盘支持。
你可以在这里看到例子 http://download.oracle.com/javase/7/docs/api/java/awt/SystemTray.html
答案 2 :(得分:4)
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();
}
}
答案 3 :(得分:2)
我想你希望在最小化主窗体时删除任务栏按钮。您可以通过将其visible属性设置为false来实现此目的,但是您可以使用Java框架执行此操作。