我是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)
非常感谢.
*编辑:由于以下答案,我终于设法让它工作.请参阅下面的评论解决方案.
重申:通常我通过其setJMenuBar(...)
方法将JMenuBar添加到JFrame本身.这将以一种BorderLayout.NORTH
方式添加到contentPane之上.如果我的JFrame是在其他地方创建的,我有时会将类放在公共getJMenuBar()
方法之上,以允许其他类提取此处创建的菜单栏.
如果我绝对需要将JMenuBar添加到JPanel,我会给JPanel一个BorderLayout并将JMenuBar添加到该BorderLayout.NORTH
位置.如果我需要通过BoxLayout添加其他组件,那么我将一个BoxLayout - 使用JPanel添加到主JPanel的BorderLayout.CENTER
位置,并使用JPanel 将其他子组件添加到BoxLayout.
归档时间: |
|
查看次数: |
99 次 |
最近记录: |