如何为游戏引擎制作的游戏制作额外的jmenubar和jlabel?

l7wslrjt  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(387)

我用我的游戏引擎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添加到游戏中。

piah890a

piah890a1#

添加 JMenuBar 给你的 JFrame 你必须使用 setJMenuBar() 方法: public void setJMenuBar(JMenuBar menubar) 设置此框架的菜单栏。
参数: menubar -放置在框架中的菜单栏
另请参见: getJMenuBar() 所以你使用它就像:

frame.setJMenuBar(mb);

对于添加到内容窗格的标签和游戏引擎: JFrame 使用 BorderLayout 布局管理器作为将组件放置在窗格上的默认设置。请参阅的文档 JFrame :
默认内容窗格将具有 BorderLayout 经理开始了。
因为您没有指定要将组件与 BorderLayout 布局管理器中,组件将放置在 CENTER . 但是,在由定义的插槽中只能有一个组件 BorderLayout 布局管理器。最新添加的组件将覆盖先前放置的组件(在同一插槽中),因此 JLabel 将被后来添加的游戏引擎覆盖。取决于您希望如何/在何处放置 JLabel 而您的游戏引擎,您必须使用不同的布局管理器,或者指定要将组件与 BorderLayout 布局管理器。

mutmk8jj

mutmk8jj2#

将jmenubar添加到jframe的方法不是:

frame.getContentPane().add(mb);

但是:

this.frame.setJMenuBar(mb);

看看java教程中的创建菜单部分。

相关问题