学习Java GUI -

时间:2016-03-05 17:16:16

标签: java swing

我正在学习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);

我无法弄清楚我应该走向哪个方向。任何指针都非常赞赏!

3 个答案:

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

至于菜单栏:

  • 将JMenuItem添加到JMenu
  • 将JMenu添加到JMenuBar
  • 使用frame.setJMenuBar(menuBar);
  • 将JMenuBar添加到框架中

以下图片可以帮助您理解层次结构:

enter image description here