1

我正在尝试将 JMenu 的弹出窗口居中,这样我就可以在 JPanel 上使用它并且它看起来不会关闭。这是一些演示我正在尝试做的代码:

import javax.swing.*;

public class Menu extends JMenu{

public static void main(String[] args) {        
    JFrame f = new JFrame("Menu Test");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menuBar = new JMenuBar();
    menuBar.add(new Menu());

    JPanel background = new JPanel();
    background.add(menuBar);
    f.setContentPane(background);

    f.setSize(250, 100);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}

public Menu() {
    super("I'm a Menu");

    add(new JMenuItem("Can This Popup be Centered?"));
    add(new JMenuItem("Not To the Right?"));
}
}

这是当前的输出

这是输出的图像

这就是我想要的(或接近的)

这是(接近)我想要的

如果有比使用 JMenu 更好的方法,请告诉我。谢谢。

4

1 回答 1

1

我想出了答案。我重写 processMouseEvent 以了解何时单击菜单,而不是简单地设置弹出菜单相对于菜单位置的位置。

    @Override
    protected void processMouseEvent(MouseEvent e) {
        super.processMouseEvent(e);
        if(e.getID() == MouseEvent.MOUSE_PRESSED)
            getPopupMenu().setLocation(
                getLocationOnScreen().x+getWidth()/2-getPopupMenu().getWidth()/2,
                getLocationOnScreen().y+getHeight());
}
于 2013-03-25T06:12:07.857 回答