두 개의 팝업 메뉴가있는 시스템 트레이 아이콘을 만들려고합니다. 하나는 마우스 왼쪽 버튼으로, 다른 하나는 오른쪽으로 호출해야합니다. AWT는 PopupMenu를 만드는 간단한 방법을 제공하지만 보이지 않는 JFrame이나 무언가를 만들지 않고 마우스 왼쪽 버튼으로 메뉴를 호출 할 수는 없습니다. 그래서 JPopupMenu 스윙은 마우스 버튼으로 호출 할 수 있습니다. 하지만 JPopupMenu는 JPopupMenu 외부에서 마우스를 눌렀을 때 버그가 아니라는 버그 (실제로 버그인지 또는 Java가 좋지 않은지는 알 수 없음)가 있습니다. 마우스 수신기의 function 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
이 스레드를 (http://stackoverflow.com/q/7461477/1057230) 시도하십시오, 귀하의 요구 사항을 충족시킬 수 있지만, 경우에만 :-) –