Java JPOppMenu行为OSX 10.6.7
我的问题是,在下面的示例中,当我右键单击JFrame时,会显示JPopupMenu,但是如果我单击JFrame之外的任何地方,菜单不会消失。我必须点击JFrame上的某个地方来摆脱它,这不是预期的行为。以下是复制的步骤:Java JPOppMenu行为OSX 10.6.7,java,swing,macos,jpopupmenu,Java,Swing,Macos,Jpopupmenu,我的问题是,在下面的示例中,当我右键单击JFrame时,会显示JPopupMenu,但是如果我单击JFrame之外的任何地方,菜单不会消失。我必须点击JFrame上的某个地方来摆脱它,这不是预期的行为。以下是复制的步骤: 从Eclipse运行窗口类(出现JFrame) 点击进入Eclipse工作区(JFrame失去焦点,隐藏在Eclipse后面) 最小化Eclipse(出现JFrame) 将鼠标放在JFrame上,右键单击(弹出窗口) 单击某个位置(不是进入JFrame或弹出窗口)。弹出窗口不会
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);
}
});
看,我还在等待答案。OSX世界中没有人有同样的问题?如果你得到答案,请分享。我在Mac OSXA上也遇到了同样的问题,类似的问题后来在上报告时使用了不同的JPopupMenus实现。我认为这是Mac OS X的Java端口中的一个bug,最好是提交一份bug报告。我不知道你的意思是什么,但使用你的测试代码它工作得很好。我从eclipse(JFrame出现)2运行窗口类。我点击进入eclipse工作区(JFrame失去焦点,隐藏在eclipse后面)3。最小化eclipse(出现JFrame)4。将鼠标放在JFrame上,右键单击(弹出窗口)5。点击某个地方(不是进入JFrame或弹出窗口),弹出窗口不会消失