我正在学习java中的GUI编程,并尝试修改现有程序以在框架顶部添加新的菜单栏。
主要方法如下。 MainPanel类扩展了JPanel并包含程序的主要组件(基本游戏)。
public static void main(String[] args) {
JFrame frame = new JFrame("Sokuban");
MainPanel panel = new MainPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
我不确定是否应该添加新的JPanel,将其添加到JFrame,然后在该添加按钮中?或者在现有面板或框架内创建JMenuBar,然后使用BorderLayout.NORTH进行排列?
只是玩弄我在谷歌上找到的东西,我已经单独尝试了以下片段(还没有把所有代码都放进去):
JMenuBar menuBar = new JMenuBar();
frame.add(new Button("Button"), BorderLayout.SOUTH);
panel.BorderLayout.SOUTH;
JPanel frame2 = new JPanel();
window.add(frame2, BorderLayout.NORTH);
JButton b1 = new JButton();
frame2.setSize(500,500);
b1.setSize(400,400);
b1.setVisible(true);
b1.setText("Button");
frame2.add(b1);
frame2.setVisible(true);
我无法弄清楚我应该走向哪个方向。任何指针都非常赞赏!
答案 0 :(得分:1)
首先:https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html :) 这是JMenuBar非常简单的教程。 :) 如果你只想在JBarMenu上按一个按钮: How to make a JMenu have Button behaviour in a JMenuBar
答案 1 :(得分:1)
不要那样做,看看它是你要找的东西
此链接适用于JMenuBar https://docs.oracle.com/javase/7/docs/api/java/awt/MenuBar.html
此链接适用于JMenu https://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html
此链接适用于JMenuItem https://docs.oracle.com/javase/7/docs/api/javax/swing/JMenuItem.html
您不需要新的JFrame来创建菜单,您可以使用JMenuBar();
JMenuBar myMenu = new JMenuBar();
//The above snippet does not create or add menus it's simply the container that holds them
JMenu fileMenu = new JMenu("File"); // This will create a menu named file
JMenuItem openChoice = new JMenuItem("Open"); /* This will create an option under
the fileMenu named open*/
//To Actually add these things you would do this
setJMenuBar(myMenu);
myMenu.add(fileMenu); // This adds fileMenu to the menubar
fileMenu.add(openChoice); // This adds openChocie to the JMenu named fileOption
现在上面的代码是一个非常基本的例子,关于如何根据我在这里概述的代码设置一个菜单,我会学习如何改进,因为这只是你的起点!
答案 2 :(得分:1)
我不确定是否应该添加新的JPanel,将其添加到JFrame,然后再添加按钮?或者在现有面板或框架内创建JMenuBar,然后使用BorderLayout.NORTH进行排列?
以下是我可以与您分享的一些个人经历:
我通常会首先计划我的用户界面的外观(在我的脑海中是纸上的)。之后,为容器确定合适的 布局管理器 。
如果UI很复杂,我可以使用多于1个布局的嵌套面板。
但最终,我通常会有一个主面板,其中包含所有其他组件(子面板/按钮/ textFields ..)。
将主面板添加到JFrame中。 (您可以拥有自定义的JPanel,我们很少需要自定义的JFrame)。
至于菜单栏:
frame.setJMenuBar(menuBar);
以下图片可以帮助您理解层次结构: