gpt4 book ai didi

鼠标退出时的 Java jpopupmenu

转载 作者:行者123 更新时间:2023-12-02 10:38:37 27 4
gpt4 key购买 nike

我正在尝试创建带有两个弹出菜单的系统托盘图标,一个应该用鼠标左键调用,另一个应该用鼠标右键调用。 AWT 提供了创建 PopupMenu 的简单方法,但在不创建不可见的 JFrame 或其他内容的情况下,不可能用鼠标左键调用菜单。因此,我发现 swing JPopupMenu 可以通过任何鼠标按钮调用。但是JPopupMenu有一个bug(我不知道这是否真的是一个bug,或者我对Java不太擅长),当我在JPopupMenu之外按下鼠标时它不会隐藏。我尝试使用鼠标监听器的函数 mouseExited,但它仅适用于 JPopupMenu 边框。如果鼠标离开 JPopupMenu 边框,它会隐藏,我无法按任何 JPopupMenu 按钮。也许,任何人都有同样的问题,可以帮助我找出如何让它正常工作。

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);




}

最佳答案

采用一个鼠标监听器并将左键单击和右键单击分开:

更改自

ti.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
jpm.setLocation(e.getX(), e.getY());
jpm.setInvoker(jpm);
jpm.setVisible(true);
}
}
});

ti.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if(e.getclickCount < 2){
if(e.getButton().equals(MouseEvent.Button1){
showPopup1();
}
if(e.getButton().equals(MouseEvent.Button3){
showPopup2();
}
}
}
});

关于鼠标退出时的 Java jpopupmenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17721293/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com