我在下面准备了一个小测试用例。我的问题是当我右键单击窗口时。 JPopupMenu 显示,但如果我单击 JWindow 菜单之外的任何位置都不会消失。我必须单击窗口上的某个位置才能将其删除,这不是预期的行为。
编辑:
阅读 akf 的答案后,我切换到 JFrame,当框架处于焦点并且弹出菜单显示时,当您单击另一个窗口时,它会消失。但如果窗口没有焦点并且您单击某处菜单不会消失。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class test {
static class window extends JWindow
implements MouseListener, MouseMotionListener{
JPopupMenu popMenu;
JPanel panel = new JPanel();
Point location;
MouseEvent pressed;
public window(){
addMouseListener( this );
addMouseMotionListener( this );
JLabel label = new JLabel("JWindow", JLabel.CENTER);
initPopMenu();
add(label);
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();
}
}
查看 Java 文档JWindow.isFocusableWindow http://java.sun.com/javase/6/docs/api/javax/swing/JWindow.htmlJWindow 不能成为焦点窗口,除非它有所有者并且所有者可见。
您正在使用默认构造函数,因此您的 JWindow 具有共享所有者 asn 不可聚焦。当它不可聚焦时,当您单击其他位置时,它无法检测到焦点丢失。
我变了JWindow
to JFrame
并添加了一个调用setUndecorated(true);
在致电之前setVisible
它对我有用。如果这些更改不适合您,请发布您正在使用的 Java 版本:java -fullversion
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)