web-dev-qa-db-fra.com

Comment masquer un JFrame dans la barre d'état système de la barre des tâches

J'avais créé un JFrame et je voulais me cacher dans taskbar (dans windows non visible en bas mais caché dans le tray menu items).
Quelqu'un peut-il me dire comment procéder?
Ai-je eu besoin de modifier les paramètres système de windows?
par exemple, vous avez peut-être vu download managers, team viewer, 4shared desktop, etc. sont masqués dans les éléments de menu de la barre des tâches.

33
Mohammad Faisal
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();
    }
}

Ceci est le programme de travail!

48
Mohammad Faisal

myFrame # getExtendedState et myFrame # setExtendedState

est fondamentalement préférable de jouer plusieurs ces ExtendedStates

frame.setExtendedState(JFrame.ICONIFIED);
frame.setExtendedState(frame.getExtendedState() | JFrame.ICONIFIED);


frame.setExtendedState(JFrame.NORMAL);
frame.setExtendedState(frame.getExtendedState() & (~JFrame.ICONIFIED));

MODIFIER 1.

par exemple

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();
            }
        });
    }
}

MODIFIER 2.

pour SystemTry vous devez définir votre JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); et dans le bon JMenuItem (s) de JPopupMen , juste JFrame#setVisible(true);

4
mKorbel