微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我创build了一个JFrame并希望隐藏在taskbar (在windows不可见的权利在底部,但隐藏在tray menu items )。

有谁可以告诉我该怎么做?

我是否需要在windows系统设置中进行一些更改?

例如,您可能已经看到一些download managers , team viewer , 4shared desktop等隐藏在任务栏的托盘菜单项。

如何获得任务栏的背景颜色

使用launch4j将Java应用程序固定到Windows 7任务栏

Qt最小化任务栏图标鼠标事件

JavaFX在全屏模式下更改场景

如何获取通知区域图标列表?

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"); Actionlistner exitlistner=new Actionlistner() { public void actionPerformed(ActionEvent e) { System.out.println("Exiting...."); System.exit(0); } }; PopupMenu popup=new PopupMenu(); MenuItem defaultItem=new MenuItem("Exit"); defaultItem.addActionlistner(exitlistner); popup.add(defaultItem); defaultItem=new MenuItem("Open"); defaultItem.addActionlistner(new Actionlistner() { 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"); } addWindowStatelistner(new WindowStatelistner() { 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);

检查文档中的TryIconDemo。 这个链接包含一小段代码。 复制并在您的IDE上运行它。

https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/misc/TrayIconDemoProject/src/misc/TrayIconDemo.java

/* * copyright (c) 1995,2008,Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms,with or without * modification,are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice,this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice,this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Oracle or the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE copYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND fitness FOR A PARTIculaR * PURPOSE ARE disCLaimED. IN NO EVENT SHALL THE copYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL,* EXEMPLARY,OR CONSEQUENTIAL damAGES (INCLUDING,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR * PROFITS; OR BUSInesS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY,OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH damAGE. */ package misc; /* * TrayIconDemo.java */ import java.awt.*; import java.awt.event.*; import java.net.URL; import javax.swing.*; public class TrayIconDemo { public static void main(String[] args) { /* Use an appropriate Look and Feel */ try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); //UIManager.setLookAndFeel("javax.swing.plaf.Metal.MetalLookAndFeel"); } catch (UnsupportedLookAndFeelException ex) { ex.printstacktrace(); } catch (illegalaccessexception ex) { ex.printstacktrace(); } catch (InstantiationException ex) { ex.printstacktrace(); } catch (ClassNotFoundException ex) { ex.printstacktrace(); } /* Turn off Metal's use of bold fonts */ UIManager.put("swing.boldMetal",Boolean.FALSE); //Schedule a job for the event-dispatching thread: //adding TrayIcon. SwingUtilities.invokelater(new Runnable() { public void run() { createAndShowGUI(); } }); } private static void createAndShowGUI() { //Check the SystemTray support if (!SystemTray.isSupported()) { System.out.println("SystemTray is not supported"); return; } final PopupMenu popup = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon(createImage("images/bulb.gif","tray icon")); final SystemTray tray = SystemTray.getSystemTray(); // Create a popup menu components MenuItem aboutItem = new MenuItem("About"); CheckBoxMenuItem cb1 = new CheckBoxMenuItem("Set auto size"); CheckBoxMenuItem cb2 = new CheckBoxMenuItem("Set tooltip"); Menu displayMenu = new Menu("display"); MenuItem errorItem = new MenuItem("Error"); MenuItem warningItem = new MenuItem("Warning"); MenuItem infoItem = new MenuItem("Info"); MenuItem noneItem = new MenuItem("None"); MenuItem exitItem = new MenuItem("Exit"); //Add components to popup menu popup.add(aboutItem); popup.addSeparator(); popup.add(cb1); popup.add(cb2); popup.addSeparator(); popup.add(displayMenu); displayMenu.add(errorItem); displayMenu.add(warningItem); displayMenu.add(infoItem); displayMenu.add(noneItem); popup.add(exitItem); trayIcon.setPopupMenu(popup); try { tray.add(trayIcon); } catch (AWTException e) { System.out.println("TrayIcon Could not be added."); return; } trayIcon.addActionlistner(new Actionlistner() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"This dialog Box is run from System Tray"); } }); aboutItem.addActionlistner(new Actionlistner() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"This dialog Box is run from the About menu item"); } }); cb1.addItemlistner(new Itemlistner() { public void itemStateChanged(ItemEvent e) { int cb1Id = e.getStateChange(); if (cb1Id == ItemEvent.SELECTED){ trayIcon.setimageAutoSize(true); } else { trayIcon.setimageAutoSize(false); } } }); cb2.addItemlistner(new Itemlistner() { public void itemStateChanged(ItemEvent e) { int cb2Id = e.getStateChange(); if (cb2Id == ItemEvent.SELECTED){ trayIcon.setToolTip("Sun TrayIcon"); } else { trayIcon.setToolTip(null); } } }); Actionlistner listener = new Actionlistner() { public void actionPerformed(ActionEvent e) { MenuItem item = (MenuItem)e.getSource(); //TrayIcon.MessageType type = null; System.out.println(item.getLabel()); if ("Error".equals(item.getLabel())) { //type = TrayIcon.MessageType.ERROR; trayIcon.displayMessage("Sun TrayIcon Demo","This is an error message",TrayIcon.MessageType.ERROR); } else if ("Warning".equals(item.getLabel())) { //type = TrayIcon.MessageType.WARNING; trayIcon.displayMessage("Sun TrayIcon Demo","This is a warning message",TrayIcon.MessageType.WARNING); } else if ("Info".equals(item.getLabel())) { //type = TrayIcon.MessageType.INFO; trayIcon.displayMessage("Sun TrayIcon Demo","This is an info message",TrayIcon.MessageType.INFO); } else if ("None".equals(item.getLabel())) { //type = TrayIcon.MessageType.NONE; trayIcon.displayMessage("Sun TrayIcon Demo","This is an ordinary message",TrayIcon.MessageType.NONE); } } }; errorItem.addActionlistner(listener); warningItem.addActionlistner(listener); infoItem.addActionlistner(listener); noneItem.addActionlistner(listener); exitItem.addActionlistner(new Actionlistner() { public void actionPerformed(ActionEvent e) { tray.remove(trayIcon); System.exit(0); } }); } //Obtain the image URL protected static Image createImage(String path,String description) { URL imageURL = TrayIconDemo.class.getResource(path); if (imageURL == null) { System.err.println("Resource not found: " + path); return null; } else { return (new ImageIcon(imageURL,description)).getimage(); } } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐