【Java】菜单制作

【Java】菜单制作本节内容就是在游戏窗口的上方 去添加菜单

大家好,欢迎来到IT知识分享网。

一、介绍

本节内容就是在游戏窗口的上方,去添加菜单。

image-20240419205521674

要创建菜单,那就要先去创建菜单的对象。在Java中有一个类,它是用来专门描述菜单的:JMenuBar(Java Menu Bar)

但是光有 JMenuBar 这一个类还不行,因为 JMenuBar 表示的是这一整个菜单,即我现在红色框起来的这一部分。

image-20240419205752990

在菜单中,它还会有很多的选项,每一个选项都对应着一个 JMenu 的类,例如:功能、联系我们、充值入口。。。

现在在菜单中有三个选项,因此在代码中,我就需要创建三个 JMenu 的对象。

image-20240419205943262

现在我以第一个 功能 选项为例,当我点击功能选项,下面它还会有多个下拉框,这里它会有很多个选择,每个选择都是独立的 JMenueItem 的对象,这里的 Item 就可以把它理解成 条目 的意思。因此我们也可以把下拉框中的每一个选择称之为每一个条目

此时这个菜单的接口,就有一点点的难度了。

image-20240419210226917


二、制作步骤

1、先创建 JMenuBar 的对象

2、再创建 JMnue 的对象

3、再创建 JMenuItem 的对象

image-20240419210429249

但是这三个对象创建出来后,它们之间是互相独立的。

4、因此,我们还需要将 JMenuItem 放到 JMenu 里面

5、再把 JMenue 放到 JMenuBar

6、最后把整个菜单 JMenuBar 添加到 JFrame 界面中


三、代码实现

先来看一下最终效果,其中 更换图片 的代码比较复杂,我们写不写,等后面写到业务逻辑的时候,再去补全。

image-20240419210949312

然后找到 GameJFrame类,当我们创建这个类对象的时候,会调用它的空参构造,首先一开始,它会对整个界面来做一个设置,设置完成后,再去让它设置菜单,因此我们应该将设置菜单的代码写在如下图箭头位置。

image-20240419211243386

等菜单初始化完毕后,再去调用 setVisible() 把整个界面展示出来,因此展示界面的代码,我们一定要放到最后面。

GameJFrame.java

下面代码只需要从 初始化菜单(第23行) 开始看即可,其他的都是之前写过的

package com.itheima.ui; import javax.swing.*; public class GameJFrame extends JFrame { 
    //规定:GameJFrame这个界面表示的就是游戏的主界面 //以后跟游戏相关的所有逻辑都写在这个类中 public GameJFrame() { 
    // 设置界面的宽高 this.setSize(603, 680); // 设置界面的标题 this.setTitle("拼图单机版 v1.0"); // 设置界面置顶,setAlwaysOnTop:一直处在最上方 // ctrl + p:可以看见需要传入一个boolean类型的参数,传入true之后,它会盖住所有的软件 this.setAlwaysOnTop(true); // 设置界面居中 this.setLocationRelativeTo(null); // 设置关闭模式,setDefaultCloseOperation:设置默认的关闭方式 // 括号中写的数字3 this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 初始化菜单 // 1.创建整个菜单对象 JMenuBar JMenuBar jMenuBar = new JMenuBar(); // 2.创建菜单上面两个选项的对象(功能、关于我们) JMenu JMenu functionJMenu = new JMenu("功能"); // 将要展示的文字放在小括号中,表示调用它的有参构造。 // 快捷键 ctrl + d :向下复制一行 JMenu aboutJMenu = new JMenu("关于我们"); // 3.创建选项下面的条目对象(功能:重新游戏、重新登陆、关闭游戏;关于我们:公众号),合起来一共四个 JMenuItem 对象 JMenuItem replayItem = new JMenuItem("重新游戏"); // 同样也是调用它的有参构造设置展示文字 // 快捷键 ctrl + d :向下复制一行 JMenuItem reLoginItem = new JMenuItem("重新登录"); JMenuItem closeItem = new JMenuItem("关闭游戏"); // 由于前三个是一组,最后一个公众号是一组,因此我们在写代码的时候打一个空行,提高阅读性 JMenuItem accountItem = new JMenuItem("公众号"); // 4.将每一个选项下面的条目添加到选项中:调用JMenu对象的add方法 functionJMenu.add(replayItem); // 快捷键 ctrl + d :向下复制一行 functionJMenu.add(reLoginItem); functionJMenu.add(closeItem); aboutJMenu.add(accountItem); // 5.将菜单里面的两个选项添加到菜单当中:调用JMenuBar对象的add方法 jMenuBar.add(functionJMenu); // 快捷键 ctrl + d :向下复制一行 jMenuBar.add(aboutJMenu); // 6.把整个菜单 `JMenuBar` 添加到 `JFrame` 界面中 // this 表示当前的界面对象,调用 setJMenuBar 方法 this.setJMenuBar(jMenuBar); // 让界面显示出来,这行代码我们建议写在最后 this.setVisible(true); } } 

代码写完后,回到 App.java 中,先将 LoginJFrameRegisterJFrame 注释掉,只留 GameJFrame,然后直接右键Run。

image-20240419214002959

程序运行完毕后发现,这里的菜单已经有了,并且点击对应的选项也会出现其包含的条目。

image-20240419214122199


四、优化

1)优化讲解

当我们写完 GameJFrame类 中的代码后,可以发现构造方法中的代码太多了!

那以后代码出问题了,还需要在构造方法中一行一行的找,太麻烦了!

因此我们需要将构造方法中不同功能的代码进行抽取,抽取成一个独立的方法。

例如将 界面设置初始化菜单 分别放到一个方法中即可。

选中上面的这一堆

image-20240419214430338

按快捷键 ctrl + alt + M ,然后改下方法名:initJFrame(初始化界面),然后回车即可。

image-20240419214548577

最后在构造方法中给 initJFrame() 方法加上注释即可。

image-20240419214732701


接下来抽取跟菜单相关的代码。

选中跟菜单相关的代码

image-20240419215013198

按快捷键 ctrl + alt + M ,然后改下方法名:initJMenuBar(初始化菜单),然后回车即可。

image-20240419215134207

最后在构造方法中给 initJMenuBar() 方法加上注释即可。


然后下面的这两个方法我们直接放到最后就行了,以后如果要修改,直接找对应的方法就OK了,非常的方便。

image-20240419215311282

现在我们再来回过头来看构造,构造方法中的代码就非常简洁了。

image-20240419215355088

最后再来右键运行,看下效果,可以看见程序没有任何问题。

image-20240419215449257


2)完整代码

GameJFrame.java

package com.itheima.ui; import javax.swing.*; public class GameJFrame extends JFrame { 
    //规定:GameJFrame这个界面表示的就是游戏的主界面 //以后跟游戏相关的所有逻辑都写在这个类中 public GameJFrame() { 
    // 初始化界面 initJFrame(); // 初始化菜单 initJMenuBar(); // 让界面显示出来,这行代码我们建议写在最后 this.setVisible(true); } private void initJMenuBar() { 
    // 1.创建整个菜单对象 JMenuBar JMenuBar jMenuBar = new JMenuBar(); // 2.创建菜单上面两个选项的对象(功能、关于我们) JMenu JMenu functionJMenu = new JMenu("功能"); // 将要展示的文字放在小括号中,表示调用它的有参构造。 // 快捷键 ctrl + d :向下复制一行 JMenu aboutJMenu = new JMenu("关于我们"); // 3.创建选项下面的条目对象(功能:重新游戏、重新登陆、关闭游戏;关于我们:公众号),合起来一共四个 JMenuItem 对象 JMenuItem replayItem = new JMenuItem("重新游戏"); // 同样也是调用它的有参构造设置展示文字 // 快捷键 ctrl + d :向下复制一行 JMenuItem reLoginItem = new JMenuItem("重新登录"); JMenuItem closeItem = new JMenuItem("关闭游戏"); // 由于前三个是一组,最后一个公众号是一组,因此我们在写代码的时候打一个空行,提高阅读性 JMenuItem accountItem = new JMenuItem("公众号"); // 4.将每一个选项下面的条目添加到选项中:调用JMenu对象的add方法 functionJMenu.add(replayItem); // 快捷键 ctrl + d :向下复制一行 functionJMenu.add(reLoginItem); functionJMenu.add(closeItem); aboutJMenu.add(accountItem); // 5.将菜单里面的两个选项添加到菜单当中:调用JMenuBar对象的add方法 jMenuBar.add(functionJMenu); // 快捷键 ctrl + d :向下复制一行 jMenuBar.add(aboutJMenu); // 6.把整个菜单 `JMenuBar` 添加到 `JFrame` 界面中 // this 表示当前的界面对象,调用 setJMenuBar 方法 this.setJMenuBar(jMenuBar); } private void initJFrame() { 
    // 设置界面的宽高 this.setSize(603, 680); // 设置界面的标题 this.setTitle("拼图单机版 v1.0"); // 设置界面置顶,setAlwaysOnTop:一直处在最上方 // ctrl + p:可以看见需要传入一个boolean类型的参数,传入true之后,它会盖住所有的软件 this.setAlwaysOnTop(true); // 设置界面居中 this.setLocationRelativeTo(null); // 设置关闭模式,setDefaultCloseOperation:设置默认的关闭方式 // 括号中写的数字3 this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156803.html

(0)
上一篇 2025-02-09 22:00
下一篇 2025-02-09 22:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信