0

我的 Java 应用程序中的 JMenuBar 位置存在问题。

我实际上使用的是文章中的 ComponentResizer.java 代码。

除了我的应用程序的北部区域(未装饰的 JFrame)及其角落(北部区域)之外,所有调整大小的东西都可以正常工作,因为 JMenuBar 阻止我从该区域调整大小。

是否有解决方案或黑客可以将 JMenuBar 向下移动一点或启用北部区域的调整大小?

我还使用setJMenuBar()方法将 JMenuBar 添加到我的应用程序的北部区域。

代码:

  public class MyApp extends JFrame {

private MyApp frame;
private JMenuBar menuBar;

public static void main(String[] args) {
    frame = new MyApp();
    frame.setUndecorated(true);
    frame.setVisible(true);
}
public MyApp(){
    initComponents();
}
private void initComponents(){
    setTitle("MediaForm");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 673, 482);
    menuBar = new JMenuBar();
    setJMenuBar(menuBar);
}
}
4

2 回答 2

1

JMenuBar 扩展了 JComponent,因此您可以将它放在任何放置普通组件的位置。请注意,如果您将其放在意外位置,可能会使用户感到困惑。

另请参阅:将 JMenuBar 添加到 JPanel?

于 2012-09-06T22:45:01.883 回答
1

我没有对此进行测试,但它JRootPane是 a JComponet,可以添加 a EmptyBorder,允许JMenuBar偏移。

如果做不到这一点,您可能需要实现自己的JRootPane来管理JMenuBar& 内容窗格的布局

更新测试

public class TestMenuFrame extends JFrame {

    public TestMenuFrame() throws HeadlessException {

        setTitle("Test");

        getRootPane().setBorder(new EmptyBorder(10, 10, 10, 10));

        JMenuBar mb = new JMenuBar();
        mb.add(new JMenu("Test"));

        setJMenuBar(mb);

        setSize(100, 100);

        getContentPane().setBackground(Color.RED);

        setLocationRelativeTo(null);

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        new TestMenuFrame().setVisible(true);

    }
}

样本

于 2012-09-06T22:41:11.280 回答