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

Jos*_*ard 2 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);
Run Code Online (Sandbox Code Playgroud)

非常感谢.

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

Hov*_*els 5

重申:通常我通过其setJMenuBar(...)方法将JMenuBar添加到JFrame本身.这将以一种BorderLayout.NORTH方式添加到contentPane之上.如果我的JFrame是在其他地方创建的,我有时会将类放在公共getJMenuBar()方法之上,以允许其他类提取此处创建的菜单栏.

如果我绝对需要将JMenuBar添加到JPanel,我会给JPanel一个BorderLayout并将JMenuBar添加到该BorderLayout.NORTH位置.如果我需要通过BoxLayout添加其他组件,那么我将一个BoxLayout - 使用JPanel添加到主JPanel的BorderLayout.CENTER位置,并使用JPanel 将其他子组件添加到BoxLayout.

教程包括:使用菜单
使用顶级容器

  • @Brogrammer:谢谢你的信息.我不得不说,我不愿意推荐玫瑰花卉网站,因为我看到很多建议都是错误的.我更喜欢在上面的答案中推荐标准的Oracle Swing教程. (2认同)