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 に答える