JFrame
を作成し、taskbar
で非表示にしたい(windows
で右下に見えず、tray menu items
)。
誰もそれを行う方法を教えてもらえますか?windows
のシステム設定を変更する必要がありましたか?
たとえば、いくつかのdownload managers
、team viewer
、4shared desktop
などは、タスクバーのトレイメニュー項目で非表示になります。
import Java.awt.*;
import Java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.UIManager;
/**
*
* @author Mohammad Faisal
* ermohammadfaisal.blogspot.com
* facebook.com/m.faisal6621
*
*/
public class HideToSystemTray extends JFrame{
TrayIcon trayIcon;
SystemTray tray;
HideToSystemTray(){
super("SystemTray test");
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("/media/faisal/DukeImg/Duke256.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) {
setVisible(true);
setExtendedState(JFrame.NORMAL);
}
});
popup.add(defaultItem);
trayIcon=new TrayIcon(image, "SystemTray Demo", popup);
trayIcon.setImageAutoSize(true);
}else{
System.out.println("system tray not supported");
}
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("Duke256.png"));
setVisible(true);
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){
new HideToSystemTray();
}
}
これが作業プログラムです!
myFrame#getExtendedState および myFrame#setExtendedState
基本的に、これらのExtendedStatesをマルチプレイする方が良い
_frame.setExtendedState(JFrame.ICONIFIED);
frame.setExtendedState(frame.getExtendedState() | JFrame.ICONIFIED);
frame.setExtendedState(JFrame.NORMAL);
frame.setExtendedState(frame.getExtendedState() & (~JFrame.ICONIFIED));
_
編集1。
例えば
_import Java.awt.event.ActionEvent;
import javax.swing.*;
public class WindowGCDemo1 {
private javax.swing.Timer timer = null;
private int count = 0;
private JFrame myFrame = new JFrame();
public WindowGCDemo1() {
myFrame = new JFrame();
myFrame.setLocation(150, 150);
myFrame.setSize(200, 400);
myFrame.setVisible(true);
System.out.println(myFrame.getExtendedState());
start();
}
private void start() {
timer = new javax.swing.Timer(1000, updateCol());
timer.start();
}
public Action updateCol() {
return new AbstractAction("Set Delay") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
timer.stop();
myFrame.setExtendedState(JFrame.ICONIFIED);
System.out.println(myFrame.getExtendedState());
count++;
startAgain();
}
};
}
private void startAgain() {
timer = new javax.swing.Timer(1000, updateColAgain());
timer.start();
}
public Action updateColAgain() {
return new AbstractAction("Set Delay") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
timer.stop();
myFrame.setExtendedState(JFrame.NORMAL);
System.out.println(myFrame.getExtendedState());
count++;
if (count > 5) {
timer.stop();
stop();
}
start();
}
};
}
private void stop() {
System.out.println("--------------------------------------------");
System.out.println("System Exit");
System.exit(0);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
WindowGCDemo1 windowGCDemo = new WindowGCDemo1();
}
});
}
}
_
編集2。
SystemTry をJFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
に設定し、適切な JPopupMenuのJMenuItem(s) 、ちょうどJFrame#setVisible(true);
に設定する必要があります