难以使用Swing布局我的基本应用程序

时间:2011-12-06 22:49:29

标签: java swing

我对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);

非常感谢。

*编辑:由于以下答案,我终于设法让它工作了。请参阅下面的评论解决方案。

1 个答案:

答案 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。

教程包括:
Using Top-Level Containers
Using Menus