大家好,欢迎来到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