我試圖用兩個彈出菜單創建系統托盤圖標,一個應該用鼠標左鍵調用,另一個用右鍵調用。 AWT提供了創建PopupMenu的簡單方法,但不能使用鼠標左鍵來調用菜單,而不使用無形的JFrame或其他東西。所以,我發現swing JPopupMenu可以通過任何鼠標按鈕調用。但是JPopupMenu有錯誤(我不知道這是一個真正的bug還是我在Java中不太好),當我在JPopupMenu之外按鼠標時,它不會隱藏。我試過使用鼠標監聽器的函數mouseExited,但它只能用於JPopupMenu邊框。如果鼠標離開JPopupMenu邊界它隱藏,我不能按任何JPopupMenu按鈕。也許,任何人都有同樣的問題,並可以幫助我找出如何使其正確工作。Java上jpopupmenu on mouseExited
public static JPopupMenu jpm;
public static TrayIcon ti;
public static void main(String args[]) throws IOException, AWTException,
ClassNotFoundException, InstantiationException,
IllegalAccessException, UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SystemTray st = SystemTray.getSystemTray();
Image icon = ImageIO.read(SipLogin.class
.getResource("/resources/phone-yellow-small.png"));
ti = new TrayIcon(icon, "Sip login", null);
jpm = new JPopupMenu();
JMenuItem jmi1 = new JMenuItem("JMenuItem1");
JMenuItem jmi2 = new JMenuItem("JMenuItem2");
JMenuItem jmi3 = new JMenuItem("JMenuItem3");
JMenuItem jmi4 = new JMenuItem("JMenuItem4");
ti.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
jpm.setLocation(e.getX(), e.getY());
jpm.setInvoker(jpm);
jpm.setVisible(true);
}
}
});
jpm.add(jmi1);
jpm.add(jmi2);
jpm.add(jmi3);
jpm.add(jmi4);
jpm.addMouseListener(new MouseAdapter() {
public void mouseExited(MouseEvent e) {
jpm.setVisible(false);
}
});
st.add(ti);
}
mKorbel刪除鼠標移動偵聽,他只想要一個在同一時間顯示,這取決於哪一個鼠標按鍵被按下的。 – predi
我知道只有一個JPopup可以被看到,但是我不能讓它像PopupMenu一樣隱藏,當鼠標在菜單外的某個地方被按下時,女巫就會隱藏起來。 – Algirdas
試試這個[thread](http://stackoverflow.com/q/7461477/1057230),不知道它是否會滿足你的要求,但只是在以下情況下:-) –