我想讓我的窗體在雙擊托盤圖標時可見?
如何捕獲雙擊圖標?
謝謝。java - 捕獲托盤中圖標的雙擊事件
7
A
回答
9
嘗試使用的MouseListener與
public void mousePressed(MouseEvent e) {
if(e.getClickCount() >= 2){
//do something
}
}
4
使用的MouseListener接口
public class MouseEventDemo ... implements MouseListener
和實施
public void mouseClicked(MouseEvent e) { }
你可以找到來自int getClickCount()
它返回的快速人數點擊價值,用戶連續點擊(包括此事件)。例如,返回2進行雙擊。
2
如果u打算寫烏爾自己的功能,用於這方面比他走的東西如下:
捕獲鼠標單擊事件,保持「長時間戳」初始化爲0L作爲一個實例變量,
現在雙擊爲3秒或5秒
so
{
if (timeStamp == 0L) {
timeStamp = System.getCurrentTime(); //please chk the exact syntax of this... it gives milli seconds
} else if ((timeStamp + 5000) <= System.getCurrentTime()) // here i am giving time window of 5 sec = 5000 milli seconds
{
//do ur double click code;
then set timeStamp back to 0;
timeStamp = 0L;
} else {
//its first click
timeStamp = System.getCurrentTime();
}
}
7
嗯內兩次點擊,基本上所有的帖子都是正確的......,但是對於corect輸出到DoubleMouseClick必須換到javax.swing.Timer中
例如
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ClickListener extends MouseAdapter implements ActionListener {
private final static int clickInterval = (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
private MouseEvent lastEvent;
private Timer timer;
public ClickListener() {
this(clickInterval);
}
public ClickListener(int delay) {
timer = new Timer(delay, this);
}
@Override
public void mouseClicked(MouseEvent e) {
/*if (e.getClickCount() > 2) {
return;
}
lastEvent = e;
if (timer.isRunning()) {
timer.stop();
doubleClick(lastEvent);
} else {
timer.restart();
}*/
if (timer.isRunning() && !e.isConsumed() && e.getClickCount() > 1) {
System.out.println("double");
timer.stop();
} else {
timer.restart();
}
}
@Override
public void actionPerformed(ActionEvent e) {
timer.stop();
singleClick(lastEvent);
}
public void singleClick(MouseEvent e) {
}
public void doubleClick(MouseEvent e) {
}
public static void main(String[] args) {
JFrame frame = new JFrame("Double Click Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addMouseListener(new ClickListener() {
@Override
public void singleClick(MouseEvent e) {
System.out.println("single");
}
@Override
public void doubleClick(MouseEvent e) {
System.out.println("double");
}
});
frame.setPreferredSize(new Dimension(200, 200));
frame.pack();
frame.setVisible(true);
}
}
但corerrect爲SystemTray中與任務欄圖標將被添加的ActionListener
例如
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;
public class TrayIconDemo {
public static void main(String[] args) {
try {// Use an appropriate Look and Feel
//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();
}
UIManager.put("swing.boldMetal", Boolean.FALSE);// Turn off metal's use of bold fonts
SwingUtilities.invokeLater(new Runnable() {//Schedule a job for the event-dispatching thread: adding TrayIcon.
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
if (!SystemTray.isSupported()) {//Check the SystemTray support
System.out.println("SystemTray is not supported");
return;
}
final PopupMenu popup = new PopupMenu();
final TrayIcon trayIcon = new TrayIcon(createImage("Icon/failed.png", "tray icon"));
final SystemTray tray = SystemTray.getSystemTray();
MenuItem aboutItem = new MenuItem("About"); // Create a popup menu components
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");
popup.add(aboutItem); //Add components to popup menu
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() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "This dialog box is run from System Tray");
}
});
aboutItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "This dialog box is run from the About menu item");
}
});
cb1.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
int cb1Id = e.getStateChange();
if (cb1Id == ItemEvent.SELECTED) {
trayIcon.setImageAutoSize(true);
} else {
trayIcon.setImageAutoSize(false);
}
}
});
cb2.addItemListener(new ItemListener() {
@Override
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() {
@Override
public void actionPerformed(ActionEvent e) {
MenuItem item = (MenuItem) e.getSource();
System.out.println(item.getLabel()); //TrayIcon.MessageType type = null;
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() {
@Override
public void actionPerformed(ActionEvent e) {
tray.remove(trayIcon);
System.exit(0);
}
});
}
protected static Image createImage(String path, String description) {//Obtain the image URL
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();
}
}
private TrayIconDemo() {
}
}
3
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Double click code here
}
};
SystemTray tray = SystemTray.getSystemTray();
TrayIcon trayIcon = new TrayIcon(<icon stuff>);
trayIcon.addActionListener(actionListener);
tray.add(trayIcon);
這是它的工作對我來說
1
trayIcon.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
if (evt.getClickCount() == 2) {
setVisible(true);
setExtendedState(JFrame.NORMAL);
}
}
});
tray.add(trayIcon);
這將完成這項工作。
相關問題
- 1. 捕獲雙擊托盤圖標事件
- 2. 捕捉點擊氣球托盤圖標
- 3. 如何使用SWT將雙擊事件監聽器添加到托盤圖標?
- 4. Java的托盤圖標NPE
- 5. 如何捕獲列表和標籤上的雙擊事件
- 6. 用於Java中托盤圖標的API
- 7. 系統托盤圖標雙/單擊問題
- 8. C#如何通過雙擊托盤圖標啓用表單
- 9. 從地圖片段中捕獲雙擊
- 10. 在Android中捕獲雙擊圖片
- 11. wxpython捕獲wx.Frame中的鍵盤事件
- 12. 如何在VB.NET中的listview上捕獲autosize雙擊事件?
- 13. 系統托盤是否有可以捕獲的事件?
- 14. 捕獲標籤單擊事件
- 15. 在ngTable中捕獲雙擊
- 16. 在圖表上單擊捕獲事件
- 17. 托盤中的C++圖標
- 18. 如何在Google地圖的標記上獲得雙擊事件
- 19. 雙擊AS3中的鼠標事件?
- 20. jqPlot - 如何捕捉雙擊事件
- 21. JOGL不捕獲Java鼠標事件
- 22. 沒有圖標的Java系統托盤
- 23. 單擊系統托盤圖標Python Win32
- 24. 捕獲點擊事件
- 25. 捕獲點擊事件
- 26. highcharts:從捕捉鼠標事件,或捕獲鼠標點擊整個圖表上
- 27. 雙擊鍵盤綁定Java
- 28. 如何捕獲WindowsFormsHost控件中的鼠標單擊事件?
- 29. 捕獲VB中的Datagridview中的鼠標點擊等事件
- 30. java swing:單擊事件雙擊工作
檢查[this](http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/)教程。 – abalogh 2011-06-09 07:41:53