gpt4 book ai didi

java - JPopupMenu 行为 OSX 10.6.7

转载 作者:行者123 更新时间:2023-12-01 05:42:20 25 4
gpt4 key购买 nike

我的问题是,当我右键单击下面示例中的 JFrame 时,会显示 JPopupMenu,但是如果我单击 JFrame 之外的任何位置,菜单不会消失。我必须单击 JFrame 上的某个位置才能将其删除,这不是预期的行为。以下是重现步骤:

  1. 从 Eclipse 运行窗口类(出现 JFrame)
  2. 单击进入 Eclipse 工作区(JFrame 失去焦点并隐藏在 Eclipse 后面)
  3. 最小化 Eclipse(出现 JFrame)
  4. 将鼠标悬停在 JFrame 上并右键单击(出现弹出窗口)
  5. 单击某处(不是 JFrame 或 Popup)。弹出窗口不会消失

我运行的是 OS X 10.6.7 和 Java 完整版 1.6.0_24-b07-334

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class test
{

static class window extends JFrame implements MouseListener,
MouseMotionListener
{

JPopupMenu popMenu;
JPanel panel = new JPanel();

Point location;
MouseEvent pressed;

public window()
{

addMouseListener(this);
addMouseMotionListener(this);

JLabel label = new JLabel("JFrame", JLabel.CENTER);

initPopMenu();
add(label);
setUndecorated(true);
setVisible(true);

// setAlwaysOnTop(true);
setLocationRelativeTo(null);
pack();
}

public void initPopMenu()
{
popMenu = new JPopupMenu();
JMenuItem item;

item = new JMenuItem("Title");
item.setEnabled(false);
popMenu.add(item);
popMenu.addSeparator();

item = new JMenuItem("Item One");
popMenu.add(item);

item = new JMenuItem("Item 2");
popMenu.add(item);

item = new JMenuItem("Item 3");
popMenu.add(item);
}

public void mousePressed(MouseEvent e)
{
pressed = e;
int nModifier = e.getModifiers();
if (((nModifier & InputEvent.BUTTON2_MASK) != 0)
|| ((nModifier & InputEvent.BUTTON3_MASK) != 0))
popMenu.show( this, e.getX(), e.getY() );
}

public void mouseClicked(MouseEvent e)
{
}

public void mouseReleased(MouseEvent e)
{
}

public void mouseDragged(MouseEvent me)
{
}

public void mouseMoved(MouseEvent e)
{
}

public void mouseEntered(MouseEvent e)
{
}

public void mouseExited(MouseEvent e)
{
}
}

public static void main(String[] args)
{
window dw = new window();
}
}

最佳答案

可以添加一个windowFocusListener,当窗口失去焦点时隐藏菜单

        this.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowLostFocus(WindowEvent e) {
if(popMenu != null){
popMenu.setVisible(false);
}
}
@Override
public void windowGainedFocus(WindowEvent e) {
//System.out.println(e);
}
});

关于java - JPopupMenu 行为 OSX 10.6.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799643/

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