是否可以在不将其添加到JPanel中的情况下移动JMenuBar

时间:2012-09-06 20:13:38

标签: java windows swing jpanel jmenubar

我在Java应用程序中遇到了JMenuBar位置的问题。

我实际上正在使用article中的ComponentResizer.java代码。

除了从我的应用程序的北部区域以外,调整大小的一切工作正常 (未修饰的JFrame)及其角落(北区)因为JMenuBar阻止我从该区域调整大小。

是否有解决方案或者黑客可以将JMenuBar向下移动一点或启用Resizing 在北方地区?

我还使用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);
}
}

2 个答案:

答案 0 :(得分:1)

我没有对此进行测试,但JRootPaneJComponet,可能会向其中添加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);

    }
}

Sample

答案 1 :(得分:1)

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

另见:add JMenuBar to a JPanel?