我对Java比较陌生,我在过去的两个晚上都试图让我的Java程序正确布局,我希望有人可以为我清除一些东西。
布局一直顺利,直到我决定使用JMenuBar向我的应用程序添加一个菜单栏,现在由于某种原因我的应用程序的菜单栏消失了,附加到窗格的顶部中心文件菜单栏的宽度,或完美地工作,但隐藏在它下面的按钮。
我最近的尝试让我更接近一点,但由于某种原因,当我将菜单栏容器设置为BorderLayout时,菜单栏的高度现在看起来很大。
有人能指出我在哪里出错了吗?
JPanel mainPane = new JPanel();
BoxLayout progLayout = new BoxLayout(mainPane, BoxLayout.Y_AXIS);
mainPane.setLayout(progLayout);
setContentPane(mainPane);
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("File");
menuBar.add(file);
JMenuItem project = new JMenuItem("New Project");
JMenuItem exit = new JMenuItem("Exit");
file.add(project);
file.add(exit);
JPanel row0 = new JPanel();
BorderLayout menuBarLayout = new BorderLayout();
row0.setLayout(menuBarLayout);
row0.add(menuBar);
add(row0);
JPanel row1 = new JPanel();
row1.setOpaque(false);
row1.add(domainLabel);
row1.add(projectNameInput);
row1.add(userSubmit);
row1.add(userClear);
add(row1);
非常感谢。
*编辑:由于以下答案,我终于设法让它工作了。请参阅下面的评论解决方案。
答案 0 :(得分:5)
重申一下:通常我通过setJMenuBar(...)
方法将JMenuBar添加到JFrame本身。这将以BorderLayout.NORTH
方式将其添加到contentPane之上。如果我的JFrame是在其他地方创建的,我有时会在公共getJMenuBar()
方法之上提供类,以允许其他类提取此处创建的菜单栏。
如果我绝对需要将JMenuBar添加到JPanel,我会给JPanel一个BorderLayout并将JMenuBar添加到BorderLayout.NORTH
位置。如果我需要通过BoxLayout添加其他组件,那么我将使用BoxLayout - 使用JPanel添加到主JPanel的BorderLayout.CENTER
位置,并使用JPanel将其他子组件添加到BoxLayout。