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

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

一、前言


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


二、问题描述


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


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);放在最后,防止某些功能无法被看见

相关文章
|
2月前
|
Web App开发 Windows
win 快捷键大全,虚拟窗口、桌面等操作细节,可以使界面整洁,分类工作;Chrome快捷键,都是一些开发的骚操作
这篇文章提供了Windows操作系统和Chrome浏览器的快捷键大全,以及Xshell的快捷键操作,旨在帮助用户提高工作效率和界面管理。
123 2
|
XML 测试技术 API
【Android开发日常】一文弄懂桌面图标快捷菜单 & 桌面小组件
开发可以定义快捷方式,以便在应用中执行特定操作。 这些快捷方式可在受支持的启动器或助理(如 Google 助理)中显示,方便用户快速启动应用中的常见任务或推荐任务。 通过本文你还将了解一些可提升快捷方式效果的最佳做法。
1067 1
|
Java 数据库
通过窗口看世界之 界面制作如此简单-带你制作旅游观光系统界面-----效果图展示
通过窗口看世界之 界面制作如此简单-带你制作旅游观光系统界面-----效果图展示
129 0
|
Windows
PowerShell 美化(谁不想要一个好看的终端呢)
PowerShell 美化(谁不想要一个好看的终端呢)
147 0
运行主程序后无法显示图形化界面的原因及其解决方法(拼图小游戏)
在定义完GameJFrame、LoginJFrame和RegisterJFrame方法后,如果要调用该方法内的成员变量,要使用this关键字,而不是像在测试类中新建对象后直接调用新的对象,这样的话由于我们调用的方法是不含参数的,如果new了一个对象会被放到堆内存中,数据也在堆内存中,所以无法访问到
239 0
运行主程序后无法显示图形化界面的原因及其解决方法(拼图小游戏)
|
SQL 缓存 前端开发
从零开始实现放置游戏(十一)——实现战斗挂机(2)注册登陆和游戏主界面
 本章主要实现注册登陆功能和游戏的主界面。有了游戏的界面,大家能有更直观的认识。   本章我们主要开发的是idlewow-game模块,其实就是游戏的客户端展示层。因为是放置游戏,为了方便,主要使用spring-mvc来开发,整个游戏形式是类似web端的文字mud游戏,会稍带一些图形图片。当然,游戏的客户端可以是多种多样的,也可以使用U3D开发成移动端或者C++/flash/silver light,开发成PC端、网页端、微端等等形式,但需要更多的美术资源。
从零开始实现放置游戏(十一)——实现战斗挂机(2)注册登陆和游戏主界面
|
数据安全/隐私保护
Qt-网易云音乐界面实现-2 红红的程序运行图标,和相似下方音乐条
被调出来出差了,这次出差可以说是非常不开心,这次出差也算给我自己提了个醒吧,那就是注意自己的精力,自己的口碑,和比人对自己的信任。具体内容如下
141 0
Qt-网易云音乐界面实现-2 红红的程序运行图标,和相似下方音乐条