大家好,欢迎来到IT知识分享网。
一、介绍
本节内容就是在游戏窗口的上方,去添加菜单。
要创建菜单,那就要先去创建菜单的对象。在Java中有一个类,它是用来专门描述菜单的:JMenuBar(Java Menu Bar)。
但是光有 JMenuBar 这一个类还不行,因为 JMenuBar 表示的是这一整个菜单,即我现在红色框起来的这一部分。

在菜单中,它还会有很多的选项,每一个选项都对应着一个 JMenu 的类,例如:功能、联系我们、充值入口。。。
现在在菜单中有三个选项,因此在代码中,我就需要创建三个 JMenu 的对象。
现在我以第一个 功能 选项为例,当我点击功能选项,下面它还会有多个下拉框,这里它会有很多个选择,每个选择都是独立的 JMenueItem 的对象,这里的 Item 就可以把它理解成 条目 的意思。因此我们也可以把下拉框中的每一个选择称之为每一个条目。
此时这个菜单的接口,就有一点点的难度了。

二、制作步骤
1、先创建 JMenuBar 的对象
2、再创建 JMnue 的对象
3、再创建 JMenuItem 的对象

但是这三个对象创建出来后,它们之间是互相独立的。
4、因此,我们还需要将 JMenuItem 放到 JMenu 里面
5、再把 JMenue 放到 JMenuBar 中
6、最后把整个菜单 JMenuBar 添加到 JFrame 界面中
三、代码实现
先来看一下最终效果,其中 更换图片 的代码比较复杂,我们写不写,等后面写到业务逻辑的时候,再去补全。
然后找到 GameJFrame类,当我们创建这个类对象的时候,会调用它的空参构造,首先一开始,它会对整个界面来做一个设置,设置完成后,再去让它设置菜单,因此我们应该将设置菜单的代码写在如下图箭头位置。
等菜单初始化完毕后,再去调用 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 中,先将 LoginJFrame 和 RegisterJFrame 注释掉,只留 GameJFrame,然后直接右键Run。

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

四、优化
1)优化讲解
当我们写完 GameJFrame类 中的代码后,可以发现构造方法中的代码太多了!
那以后代码出问题了,还需要在构造方法中一行一行的找,太麻烦了!
因此我们需要将构造方法中不同功能的代码进行抽取,抽取成一个独立的方法。
例如将 界面设置、初始化菜单 分别放到一个方法中即可。
选中上面的这一堆
按快捷键 ctrl + alt + M ,然后改下方法名:initJFrame(初始化界面),然后回车即可。

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

接下来抽取跟菜单相关的代码。
选中跟菜单相关的代码
按快捷键 ctrl + alt + M ,然后改下方法名:initJMenuBar(初始化菜单),然后回车即可。
最后在构造方法中给 initJMenuBar() 方法加上注释即可。
然后下面的这两个方法我们直接放到最后就行了,以后如果要修改,直接找对应的方法就OK了,非常的方便。
现在我们再来回过头来看构造,构造方法中的代码就非常简洁了。

最后再来右键运行,看下效果,可以看见程序没有任何问题。
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








