比如有一个frame,当我单击最小化按纽后,如何让它最小化到系统托盘(即在状态栏出现一个图标),而不是默认的最小化到任务栏?
解决方案 »
- 求助.!类的问题或者是参数问题.
- java.sql.SQLException: Invalid argument value: Duplicate entry 'name' for key 1是什么问题?
- 如何把把一个int数放到一个BYTE[4]的数组里去?
- eclipse插件:openexplorer(直接用资源管理器打开选择文件、文件夹、JAR包)跨平台
- 请问一个正则表达式的问题,麻烦高手帮帮忙。
- 这个junit不报错是什么意思。。
- 抽象方法可以直接調用嗎?
- 正在编写的一段程序出错,请高手进来看看。。。
- 一个疑问
- 在表格里放的是model,想让每个单元格可编辑,然后点击一个按钮让数据变化的单元格能读入改变后的值,怎么办?(急!!!)
- 求教:如何创建类似jbuilder风格的窗格
- Log4j配置问题和打包问题
用JAVA开源实现系统托盘(一)——SysTray for Java
网上主要流传有两种方式实现系统托盘:
1.Windows Tray Icon ( http://jeans.studentenweb.org/java/trayicon/trayicon.html )
2.SysTray for Java ( http://systray.sourceforge.net/ )
这两个都是开源的...可以根据上面的下载.
相对来说,我更喜欢SysTray for Java,原因很简单,SysTray for Java实现了我所要的功能而且相对来说比Windows Tray Icon 要简单.
使用SysTray是很简单的.下载下来的文件有个例子Example.java,照着这个实现你所需要的功能应该不算困难.
主要是菜单和按钮的操作,和操作一般的JFrame一样.http://blog.xjtu.edu.cn/user1/1034/archives/2006/64310.shtml
import java.awt.event.*;
import java.io.InputStream;
import java.net.URI;public class GoMustang
{
private TrayIcon trayIcon;
private String actionMessage = "...";
public static void main (String [] args) throws Exception
{
SplashScreen splashScreen = SplashScreen.getSplashScreen ();
if (splashScreen != null)
{
pause(3000);
splashScreen.close();
}
GoMustang mustang = new GoMustang();
mustang.createTrayIcon();
} public void createTrayIcon() throws Exception
{
if (SystemTray.isSupported ())
{
System.out.println("System Tray Supported. Creating TrayIcon...");
// create launch browser menu item
MenuItem launchBrowserItem = new MenuItem("Launch Browser");
// create action listener for lauch browswer menu item
ActionListener launchListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (Desktop.isDesktopSupported())
{
actionMessage = "Launched Browser";
try
{
trayIcon.displayMessage("GoMustang!","Lauching Browser...", TrayIcon.MessageType.INFO);
Desktop desktop = Desktop.getDesktop();
desktop.browse(new URI("http://localhost/"));
trayIcon.setToolTip("GoMustang!");
}
catch(Exception exp)
{
}
}
}
};
// add listener to launch browser menu item
launchBrowserItem.addActionListener(launchListener); // create exit menu item
MenuItem exitItem = new MenuItem("Exit");
// create action listeners for exit menu items
ActionListener exitListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
};
// add action listener to exit menu item
exitItem.addActionListener(exitListener);
// create popup menu
PopupMenu popup = new PopupMenu(); // Add exit and launch browser menu items to Popup Menu
// Order in which MenuItems are added to PopupMenu determines the order in which they are displayed
popup.add(launchBrowserItem);
System.out.println("Added Launch Browser MenuItem To PopupMenu");
// add exit menutime to popup
popup.add(exitItem);
System.out.println("Added Exit MenuItem To PopupMenu");
// Get the tray icon's image from JAR
InputStream in = getClass().getResourceAsStream("gomustang.gif");
byte buffer[] = new byte[in.available()];
for (int i = 0, n = in.available(); i<n; i++)
buffer[i] = (byte)in.read();
Image image = Toolkit.getDefaultToolkit().createImage(buffer);
System.out.println("Retreived TrayIcon Image From JAR"); // Create system tray Icon with Image, title text and Popup menu we just created
trayIcon = new TrayIcon(image, "Go Mustang!", popup);
// The imagesize adjusts to available space
trayIcon.setImageAutoSize(true);
// Create Action Listeners. It displays the Message
ActionListener actionListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
trayIcon.displayMessage("Latest Gallops", actionMessage, TrayIcon.MessageType.INFO);
}
};
trayIcon.addActionListener(actionListener);
System.out.println("Added ActionListener To TrayIcon");
// create Mouse Listeners. These currently do not do much
MouseListener mouseListener = new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
System.out.println("TrayIcon - Mouse Clicked");
} public void mouseEntered(MouseEvent e)
{
System.out.println("TrayIcon - Mouse Entered");
} public void mouseExited(MouseEvent e)
{
System.out.println("TrayIcon - Mouse Exited");
} public void mousePressed(MouseEvent e)
{
System.out.println("TrayIcon - Mouse Pressed");
} public void mouseReleased(MouseEvent e)
{
System.out.println("TrayIcon - Mouse Released");
}
};
trayIcon.addMouseListener(mouseListener);
System.out.println("Added MouseListener To TrayIcon"); SystemTray systemTray = SystemTray.getSystemTray();
systemTray.add(trayIcon);
System.out.println("...TrayIcon Successfully Added To SystemTray");
}
else
{
System.out.println ("SystemTray Not Supported By Operating System");
}
}
public static void pause(int milliSeconds) throws Exception
{
System.out.println("Pausing For " + milliSeconds/1000 + " Seconds...");
Thread.sleep (milliSeconds); // Pause milli seconds
}
}
/** * A sample application of J2SE 6.0 TrayIocn * * @author Amooo * @version 1.00 06/07/11 */import java.awt.AWTException;import java.awt.Image;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.Toolkit;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.WindowConstants;public class TrayIconAdvanced extends JFrame { private TrayIcon ti; public static void main(String[] args) { TrayIconAdvanced frame = new TrayIconAdvanced(); frame.setTitle("TrayIconAdvanced"); frame.setVisible(true); frame.setSize(200, 65); frame.setLocation(300, 200); } public TrayIconAdvanced() { setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (SystemTray.isSupported()) { setVisible(false); minimizeToTray(); } else { System.exit(0); } } }); JPanel root = new JPanel(); JButton exitButton = new JButton("Exit"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); root.add(exitButton); getContentPane().add(root); pack(); initTi(); } private void initTi() { Image image = Toolkit.getDefaultToolkit().getImage( this.getClass().getResource("TrayIcon.png")); PopupMenu popupTi = new PopupMenu(); MenuItem showItem = new MenuItem("Show"); ActionListener showListener = new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(true); SystemTray.getSystemTray().remove(ti); } }; showItem.addActionListener(showListener); popupTi.add(showItem); ti = new TrayIcon(image, "TrayIcon", popupTi); ti.addActionListener(showListener); } public void minimizeToTray() { SystemTray tray = SystemTray.getSystemTray(); try { tray.add(ti); } catch (AWTException e) { System.err.println(e); } }}
http://blog.csdn.net/techyang/archive/2006/12/18/1448080.aspx
JDK1.6提供SystemTray支持了