我正在使用
Java中的任务托盘图标,我喜欢使用左键单击弹出菜单打开一个弹出菜单,我右键单击打开,请快速回复.
提前致谢…
这里是代码工作的右键点击需要显示相同的弹出窗口左键单击…
不要忘记放置任何图像@“src / img”文件夹,名称为“titleImg.jpg”
只是运行这个…这是一个工作的例子,但我必须使用左键显示相同的弹出窗口
我已经检查了鼠标监听器,它听到左键单击托盘图标,但如何显示弹出式菜单使用?
package com.abc.dao; import java.awt.AWTException; import java.awt.CheckBoxMenuItem; import java.awt.Menu; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; public class MyTaskTray { public static void main(String arg[]){ //Check the SystemTray is supported if (!SystemTray.isSupported()) { System.out.println("SystemTray is not supported"); return; } final PopupMenu popup = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon(Toolkit.getDefaultToolkit().getImage(new java.io.File("").getAbsolutePath()+"/bin/img/titleImg.jpg"),"Library Drop"); final SystemTray tray = SystemTray.getSystemTray(); // Create a pop-up 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 pop-up 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."); } } }
解决方法@H_502_15@
您实际缺少的是显示您的PopupMenu的父组件.实现这一点的一个方法是使用“隐形”框架(实际上它是可见的,但是具有0边界并且未装饰,所以你看不到)像这样:
import java.awt.AWTException;
import java.awt.CheckBoxMenuItem;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.MalformedURLException;
import java.net.URL;
public class MyTaskTray {
public static void main(String arg[]) throws MalformedURLException {
final Frame frame = new Frame("");
frame.setUndecorated(true);
// Check the SystemTray is supported
if (!SystemTray.isSupported()) {
System.out.println("SystemTray is not supported");
return;
}
final TrayIcon trayIcon = new TrayIcon(Toolkit.getDefaultToolkit().getImage(
new URL("http://home.comcast.net/~supportcd/Icons/Java_required.jpg")),"Library Drop");
final SystemTray tray = SystemTray.getSystemTray();
// Create a pop-up menu components
final PopupMenu popup = createPopupMenu();
trayIcon.setPopupMenu(popup);
trayIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
frame.add(popup);
popup.show(frame,e.getXOnScreen(),e.getYOnScreen());
}
}
});
try {
frame.setResizable(false);
frame.setVisible(true);
tray.add(trayIcon);
} catch (AWTException e) {
System.out.println("TrayIcon could not be added.");
}
}
protected static PopupMenu createPopupMenu() {
final PopupMenu popup = new PopupMenu();
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 pop-up 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);
return popup;
}
}
从Java 1.7开始,您可以添加以下行来从任务栏中删除应用程序栏:
frame.setType(Type.UTILITY);
import java.awt.AWTException; import java.awt.CheckBoxMenuItem; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.net.MalformedURLException; import java.net.URL; public class MyTaskTray { public static void main(String arg[]) throws MalformedURLException { final Frame frame = new Frame(""); frame.setUndecorated(true); // Check the SystemTray is supported if (!SystemTray.isSupported()) { System.out.println("SystemTray is not supported"); return; } final TrayIcon trayIcon = new TrayIcon(Toolkit.getDefaultToolkit().getImage( new URL("http://home.comcast.net/~supportcd/Icons/Java_required.jpg")),"Library Drop"); final SystemTray tray = SystemTray.getSystemTray(); // Create a pop-up menu components final PopupMenu popup = createPopupMenu(); trayIcon.setPopupMenu(popup); trayIcon.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { frame.add(popup); popup.show(frame,e.getXOnScreen(),e.getYOnScreen()); } } }); try { frame.setResizable(false); frame.setVisible(true); tray.add(trayIcon); } catch (AWTException e) { System.out.println("TrayIcon could not be added."); } } protected static PopupMenu createPopupMenu() { final PopupMenu popup = new PopupMenu(); 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 pop-up 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); return popup; } }
从Java 1.7开始,您可以添加以下行来从任务栏中删除应用程序栏:
frame.setType(Type.UTILITY);