搭建完菜单后运行不显示菜单的原因及其解决方法(拼图小游戏)

简介: 在搭建完菜单以后,程序不报错也能运行,但是运行结果就是一个框,就跟没有搭建过菜单一样,如下图所示,没有我们想象中的菜单栏,更别说有下拉菜单了,但是如果将搭建菜单的代码单独放到一个测试类中去测试一下的话,会显示出来菜单,也就是说我们搭建菜单的核心代码是没有问题的

一、前言


本文将讲述了一个在搭建菜单以后运行不成功的问题,会达不到我们想要的效果,并且代码完全没有编译上的问题,对于像我一样的初学者来说会非常的不理解问题出在哪里,那么本文就带领大家搞明白问题出在哪里以及解决方法


二、问题描述


在搭建完菜单以后,程序不报错也能运行,但是运行结果就是一个框,就跟没有搭建过菜单一样,如下图所示,没有我们想象中的菜单栏,更别说有下拉菜单了,但是如果将搭建菜单的代码单独放到一个测试类中去测试一下的话,会显示出来菜单,也就是说我们搭建菜单的核心代码是没有问题的


0fe9fe010a3b4428a133ced268e150e8.png


三、原因分析


1.代码分析


我们先来看一下代码


import javax.swing.*;
public class GameJFrame extends JFrame {
    public  GameJFrame(){
        //设置界面大小
        this.setSize(603,680);
        //设置标题
        this.setTitle("拼图小游戏 V1.0");
        //设置永远置顶
        this.setAlwaysOnTop(true);
        //设置程序随着窗口关闭而结束运行
        //this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setDefaultCloseOperation(3);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置界面可视化
        this.setVisible(true);
        //初始化菜单
        //创建整个菜单对象(创建JMenuBar)
        JMenuBar jMenuBar = new JMenuBar();
        //创建"功能"和"关于我们"(创建JMenu)
        JMenu functionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建菜单下条目(创建JMenuItem)
        JMenuItem restartItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");
        JMenuItem accountItem = new JMenuItem("公众号");
        //将"功能"下条目添加到"功能"里(将JMenuItem放到JMenu中)
        functionJMenu.add(restartItem);
        functionJMenu.add(reloginItem);
        functionJMenu.add(closeItem);
        aboutJMenu.add(accountItem);//将"关于我们"下条目添加到"关于我们"里
        //将JMenu放到JMenuBar中
        jMenuBar.add(functionJMenu);
        jMenuBar.add(aboutJMenu);
        //给整个界面设置菜单,将JMenuBar添加到整个JFrame中
        this.setJMenuBar(jMenuBar);
    }
}


看似好像是没有问题的,但是由于我们这个拼图小游戏这个是一个可视化的界面,如果看不见的话,那么一定是设置可视化的步骤出现了问题所以我们就要去查看有关于设置可视化的语句,也就是下图红色框的内容


63a4057385ee40218e25c765dda8a1ac.png


2.执行分析


在这里我们有写一行代码来设置界面可视化,没有问题,但是这里设置可视化的语句在我们搭建菜单的上面,由于执行的顺序是顺序执行的,并且在执行完这个语句以后,这个语句就会从内存中消失,不会再执行第二遍,所以我们只能看到一个框,但是看不到搭建的菜单


3.核心原因(总结)


可视化语句会在搭建菜单前执行,所以当搭建完菜单后不会显示


四、解决方案


  • 将可视化语句放到我们搭建的菜单的后面,使得窗口可视化语句放在最后执行,防止部分功能无法被看见


五、正确代码演示


import javax.swing.*;
public class GameJFrame extends JFrame {
    public  GameJFrame(){
        //设置界面大小
        this.setSize(603,680);
        //设置标题
        this.setTitle("拼图小游戏 V1.0");
        //设置永远置顶
        this.setAlwaysOnTop(true);
        //设置程序随着窗口关闭而结束运行
        //this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setDefaultCloseOperation(3);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //初始化菜单
        //创建整个菜单对象(创建JMenuBar)
        JMenuBar jMenuBar = new JMenuBar();
        //创建"功能"和"关于我们"(创建JMenu)
        JMenu functionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建菜单下条目(创建JMenuItem)
        JMenuItem restartItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");
        JMenuItem accountItem = new JMenuItem("公众号");
        //将"功能"下条目添加到"功能"里(将JMenuItem放到JMenu中)
        functionJMenu.add(restartItem);
        functionJMenu.add(reloginItem);
        functionJMenu.add(closeItem);
        aboutJMenu.add(accountItem);//将"关于我们"下条目添加到"关于我们"里
        //将JMenu放到JMenuBar中
        jMenuBar.add(functionJMenu);
        jMenuBar.add(aboutJMenu);
        //给整个界面设置菜单,将JMenuBar添加到整个JFrame中
        this.setJMenuBar(jMenuBar);
        //设置界面可视化
        this.setVisible(true);
    }
}


六、涉及知识点


【代码执行顺序】


七、结语


在写可视化界面的时候,一定要把可视化语句 this.setVisible(true);放在最后,防止某些功能无法被看见

相关文章
|
7月前
|
Python
飞机大战-创建窗口(1)
用Python编程,编写飞机大战-创建窗口。
35 0
|
9月前
|
XML Java 测试技术
【Android开发日常】一文弄懂桌面图标快捷菜单 & 桌面小组件
开发可以定义快捷方式,以便在应用中执行特定操作。 这些快捷方式可在受支持的启动器或助理(如 Google 助理)中显示,方便用户快速启动应用中的常见任务或推荐任务。 通过本文你还将了解一些可提升快捷方式效果的最佳做法。
|
10月前
|
Java 数据库
通过窗口看世界之 界面制作如此简单-带你制作旅游观光系统界面-----效果图展示
通过窗口看世界之 界面制作如此简单-带你制作旅游观光系统界面-----效果图展示
93 0
|
11月前
|
开发工具 UED 开发者
在微信小游戏制作工具中实现各种效果和功能的按钮
在游戏设计中有一个名词叫“反馈”,大体就是指当玩家在进行游戏时,游戏所给予玩家的一些东西,比如常见的在点击按钮时,按钮会变换颜色,或进行缩放,或播放音效等等。总之,不论玩家在游戏中进行任何的操作,游戏都应该给予玩家一个合理的反馈。让玩家能够明白他的操作所获得的结果是什么。
263 0
|
11月前
|
Windows
PowerShell 美化(谁不想要一个好看的终端呢)
PowerShell 美化(谁不想要一个好看的终端呢)
114 0
运行主程序后无法显示图形化界面的原因及其解决方法(拼图小游戏)
在定义完GameJFrame、LoginJFrame和RegisterJFrame方法后,如果要调用该方法内的成员变量,要使用this关键字,而不是像在测试类中新建对象后直接调用新的对象,这样的话由于我们调用的方法是不含参数的,如果new了一个对象会被放到堆内存中,数据也在堆内存中,所以无法访问到
178 0
运行主程序后无法显示图形化界面的原因及其解决方法(拼图小游戏)
|
前端开发 JavaScript
两步实现在网站左下角实现音乐播放器弹窗听歌
两步实现在网站左下角实现音乐播放器弹窗听歌
112 0
两步实现在网站左下角实现音乐播放器弹窗听歌
|
数据安全/隐私保护
Qt-网易云音乐界面实现-2 红红的程序运行图标,和相似下方音乐条
被调出来出差了,这次出差可以说是非常不开心,这次出差也算给我自己提了个醒吧,那就是注意自己的精力,自己的口碑,和比人对自己的信任。具体内容如下
108 0
Qt-网易云音乐界面实现-2 红红的程序运行图标,和相似下方音乐条