如何为游戏引擎制作的游戏制作额外的 JMenuBar 和 JLabel?

问题描述

我有一个用我的游戏引擎 Java 类制作的游戏。 游戏引擎使用paintComponent 来绘制元素。 以下是游戏的片段: gamepic

我想在这个游戏的顶部或按钮上添加一个额外的 JLabel 和 JMenu。

这是我的代码

public class LabyrinthGUI {

    private JFrame frame;
    private GameEngine gameArea;
    private String PlayerName;

    public LabyrinthGUI(String PlayerName) {
        frame = new JFrame("GAME");
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

         //making new manu bar
        JMenuBar mb = new JMenuBar();
        JMenu sg = new JMenu("Settings");
        JMenuItem ng = new JMenuItem("New game");
        

        mb.add(ng);
        mb.add(sg);

        frame.getContentPane().add(mb);
        gameArea = new GameEngine(PlayerName);//This is a game engine 

      
        JLabel l1 = new JLabel("First Label.");  
        l1.setBounds(50,50,100,30);  
         frame.add(l1);
            

        frame.getContentPane().add(gameArea);

        frame.setPreferredSize(new Dimension(800,600));
        frame.setResizable(false);
        frame.pack();
        frame.setVisible(true);


    }

我的代码的问题是它似乎没有将 JLabel 和 JMenuBar 添加到游戏中。

解决方法

要将 JMenuBar 添加到您的 JFrame,您必须使用 setJMenuBar() 方法:

public void setJMenuBar(JMenuBar menubar)

设置此框架的菜单栏。

参数:

  • menubar - 放置在框架中的菜单栏

另见:

getJMenuBar()

所以你使用它:

frame.setJMenuBar(mb);

对于添加到内容窗格的标签和游戏引擎:JFrame 使用 BorderLayout layout manager 作为将组件放置在窗格上的默认值。请参阅 JFrame 的文档:

默认内容窗格将设置一个 BorderLayout 管理器。

由于您尚未使用 BorderLayout 布局管理器指定要放置组件的确切位置,因此组件将放置在 CENTER 中。但是,BorderLayout 布局管理器定义的插槽中只能有一个组件。最新添加的组件将覆盖之前放置的组件(在同一插槽中),因此您添加的 JLabel 将被稍后添加的游戏引擎覆盖。根据您想要放置 JLabel 的方式/位置和您的游戏引擎,您必须使用不同的布局管理器或使用 BorderLayout 布局管理器指定您想要放置组件的位置。

,

将 JMenuBar 添加到 JFrame 的方法不是:

frame.getContentPane().add(mb);

但是:

this.frame.setJMenuBar(mb);

查看 Java 教程中的 Creating Menus 部分。