Utworzono JFrame
i chcę ukryć się w taskbar
(w windows
niewidoczna na samym dole, ale ukryta w tray menu items
).
Czy ktoś może mi powiedzieć, jak to zrobić?
Czy muszę wprowadzić pewne zmiany w ustawieniach systemu windows
?
na przykład, mogłeś zobaczyć, że niektóre pozycje download managers
, team viewer
, 4shared desktop
itp. Są ukryte w elementach paska zadań paska zadań.Jak ukryć ramkę JFrame w zasobniku systemowym paska zadań
33
A
Odpowiedz
44
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();
}
}
Jest to program pracy!
4
myFrame#getExtendedState i myFrame#setExtendedState
zasadzie lepiej Multiplay te ExtendedStates
frame.setExtendedState(JFrame.ICONIFIED);
frame.setExtendedState(frame.getExtendedState() | JFrame.ICONIFIED);
frame.setExtendedState(JFrame.NORMAL);
frame.setExtendedState(frame.getExtendedState() & (~JFrame.ICONIFIED));
EDIT 1.
np
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();
}
});
}
}
EDIT 2.
dla SystemTry trzeba ustawić dla JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
i we właściwej JMenuItem(s) from JPopupMenu tylko JFrame#setVisible(true);
-3
Sprawdź trylconDemo z dokumentacji. Ten link zawiera mały fragment kodu. Skopiuj i uruchom go na swoim IDE.
/*
* 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, BUT NOT LIMITED TO,
* 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.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,
"This dialog box is run from System Tray");
}
});
aboutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,
"This dialog box is run from the About menu item");
}
});
cb1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
int cb1Id = e.getStateChange();
if (cb1Id == ItemEvent.SELECTED){
trayIcon.setImageAutoSize(true);
} else {
trayIcon.setImageAutoSize(false);
}
}
});
cb2.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
int cb2Id = e.getStateChange();
if (cb2Id == ItemEvent.SELECTED){
trayIcon.setToolTip("Sun TrayIcon");
} else {
trayIcon.setToolTip(null);
}
}
});
ActionListener listener = new ActionListener() {
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.addActionListener(listener);
warningItem.addActionListener(listener);
infoItem.addActionListener(listener);
noneItem.addActionListener(listener);
exitItem.addActionListener(new ActionListener() {
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();
}
}
}
Powiązane problemy
- 1. JavaFX aplikacji w zasobniku systemowym
- 2. Po uruchomieniu programu w zasobniku systemowym
- 3. Ukrywanie mojego programu w zasobniku systemowym w systemie Windows
- 4. Jak zapobiec pozostawianiu ikony w zasobniku systemowym przy wyjściu?
- 5. PyQt: Pokaż menu w zasobniku systemowym
- 6. Co to jest vshub.exe w zasobniku systemowym?
- 7. Jak mogę przewinąć moją ramkę JFrame za pomocą paska JScroll?
- 8. Jak sprawdzić, czy końcówka balonu w zasobniku systemowym jest zamknięta?
- 9. Wiele ikon powiadomień w zasobniku systemowym w WinForm
- 10. Jak uruchomić aplikację bezpośrednio w zasobniku systemowym? (.NET C#)
- 11. Jak ukryć ikonę paska zadań aplikacji PyQt4 Python?
- 12. Brakujące ikony w zasobniku systemowym w Fedorze 19 Desktop Edition
- 13. Jak wprowadzić alert JFrame na pasku zadań?
- 14. Lepsze powiadomienia w zasobniku
- 15. Jak dodać JTextField do paska menu JFrame?
- 16. Jak ukryć aplikację na pasku zadań w systemie Windows 7?
- 17. Ukrywanie winforms aplikacji z paska zadań
- 18. Jak zautomatyzować kliknięcie prawym przyciskiem myszy ikony w zasobniku systemowym przy użyciu C#
- 19. Osadzanie na pasku zadań
- 20. Jak ukryć wpis na pasku zadań, ale zachować formularz okna?
- 21. Jak ukryć element uibarbutton paska nawigacji
- 22. Aplikacja WPF, która ma tylko ikonę w zasobniku
- 23. Java.awt.SystemTray nie wyświetla ikonę w zasobniku prawidłowo
- 24. Jaki jest najprostszy sposób umieszczenia skryptu Pythona w zasobniku systemowym (Windows)?
- 25. Program Outlook korzystający z reguł nie wyświetlających nowego powiadomienia o wiadomościach w zasobniku systemowym
- 26. Wyłącz JFrame po otwarciu nowego JFrame
- 27. Jak utworzyć pasek narzędzi dla paska zadań w systemie Windows?
- 28. Jak utworzyć ikonę paska zadań z wxPHP w Ubuntu/Unity?
- 29. C# Pokazywanie przycisków na miniaturach paska zadań
- 30. Jak ukryć nazwę aplikacji z paska tytułu w systemie Android?
nie dostać go prawidłowo. Proszę, powiedz mi, jakie kroki należy wykonać! –
Powyższa metoda wydaje się być dla 'ustawienia' i' pobierania 'stanu rozszerzonego ramki, ale co z logiką, która ma zostać zaimplementowana w celu zminimalizowania' ramki' do ikony w zasobniku systemowym? –
hmmm Nie mogę przeczytać całego pytania zobacz moją EDYT 1 dla mojego missunderstood – mKorbel