我準備了下面的一個小測試用例。我的問題是當我右鍵單擊窗口。 JPopupMenu出現,但如果我點擊JWindow菜單外的任何地方都不會消失。我必須點擊窗口上的某個地方纔能擺脫它,這不是預期的行爲。JPopupMenu行爲
編輯: 閱讀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版本? – akf 2009-09-30 16:48:02
我在使用Java 6的WinXP上測試了它,並且在切換到JFrame後,如果窗口失去焦點,彈出式菜單消失。如果窗口沒有焦點,我很困惑你如何獲得彈出菜單... – 2009-10-01 02:50:56
只需右鍵點擊它即使沒有焦點,它也顯示菜單,這發生在Windows和Mac上os x。 – 2009-10-01 12:14:02