当前位置: 首页 > 面试题库 >

如何在任务栏的系统托盘中隐藏JFrame

程英资
2023-03-14
问题内容

我创建了一个JFrame,想隐藏在其中taskbar(在windows底部不可见,而在中隐藏tray menu items)。
有人可以告诉我该怎么做吗?
我是否需要对的系统设置进行一些更改windows
例如,你可能已经看到了一些download managersteam viewer4shared 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();
    }
}

这是工作程序!



 类似资料:
  • 在我的平板电脑上,它有下面的控制条来控制back、home等(我不知道正确的名称、状态栏、控制栏、动作栏或其他) 在程序中,它使用以下方法来实现全屏。 但我不知道为什么酒吧还在这里。因为它,我不能有正确的屏幕尺寸。 谁能告诉我如何移除它?

  • 当我的项目启动时,主框架的下半部分位于任务栏下方。 如何解决这个问题。

  • 将图标和上下文菜单添加到系统托盘。 进程: 主进程​ Tray是一个[EventEmitter][event-emitter]. 1 const {app, Menu, Tray} = require('electron') 2 let tray = null 3 app.on('ready', () => { 4 tray = new Tray('/path/to/my/icon') 5 con

  • 系统托盘 添加图标和上下文菜单到系统通知区 进程:主进程 Tray 是一个 EventEmitter. const { app, Menu, Tray } = require('electron') let tray = null app.on('ready', () => { tray = new Tray('/path/to/my/icon') const contextMenu =

  • 问题内容: 我正在使用桌面应用程序创建GUI。我使用此代码根据平台屏幕的分辨率设置的GUI大小。 问题是,当我运行该应用程序时,GUI覆盖了所有屏幕。Windows任务栏也隐藏在GUI的后面。 我希望无论任务栏的大小如何,任务栏在所有情况下都应该可见。我该如何实现? 问题答案: 关于什么 ?

  • 在android上隐藏永久系统栏最好的方法是什么?我想要一个没有系统栏的全屏app。到目前为止,我所得到的是隐藏栏,但如果我向上滑动,它就会出现。 有什么建议吗?