Java Swing 实战:手把手教你写一个拼图小游戏(一)
1.前言本文基于 Java Swing 实现带登录注册的拼图小游戏跟随 B 站黑马程序员教程练习适合 Java 初学者、课设练手使用。本文为系列第一篇主要讲解项目整体结构、登录界面LoginJFrame和注册界面RegisterJFrame的编写包含基础配置、代码详解新手可直接跟着敲后续第二篇讲解游戏主界面及菜单功能。2.项目整体思路本项目是基于 Java Swing 开发的拼图小游戏为了结构清晰、便于维护我将界面拆分为四个独立的类1.APP 类项目的入口程序包含 main 方法程序从这里启动默认打开登录界面。2.LoginJFrame 类登录界面作为用户进入游戏的第一道窗口后续会添加账号、密码输入框与登录、注册按钮。3.RegisterJFrame 类注册界面用于新用户注册账号结构与登录界面类似窗口大小根据输入项做了适当调整。4.GameJFrame 类游戏主界面是拼图游戏真正运行的窗口后续会在这里添加菜单、图片、拼图逻辑等核心功能。2.1界面搭建首先完成了三大核心窗口登录、注册、游戏主界面的基础搭建同时创建了程序入口类 APP 来启动项目。所有窗口的搭建逻辑完全一致核心都是通过继承 JFrame 类配置窗口的基础属性我们以游戏主界面 GameJFrame 为例详细讲解界面搭建的通用步骤2.1.1通用界面搭建逻辑核心代码import javax.swing.*; public class GameJFrame extends JFrame { // JFrame 界面窗体 // 规定GameJFrame这个界面表示的就是游戏的主界面 // 跟游戏相关的所有界面就写在这个类中 public GameJFrame() { // 设置界面的宽高 this.setSize(608, 680); // 设置界面的标题 this.setTitle(拼图单机版 v1.0); // 设置界面置顶 this.setAlwaysOnTop(true); // 设置界面居中 this.setLocationRelativeTo(null); // 设置关闭模式 this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 初始化菜单后续完善 JMenu functionJMenu new JMenu(); } }详细讲解1.类定义与继承public class GameJFrame extends JFrame我们自定义了 GameJFrame 类并继承了 Swing 中的 JFrame 类。JFrame 是 Java 中最基础的顶级窗口容器继承它后我们的类就直接拥有了窗口的所有基础功能不用从零写窗口逻辑。2.设置窗口大小this.setSize(608, 680);this 指代当前 GameJFrame 对象也就是我们的游戏主窗口。这里设置窗口宽为 608px、高为 680px这个尺寸是专门为拼图游戏设计的刚好适配后续要加载的拼图图片保证图片完整显示、布局美观。3.设置窗口标题this.setTitle(拼图单机版 v1.0);给窗口设置标题会显示在窗口的左上角明确这是拼图游戏的主界面同时标注版本号方便后续迭代更新。4.设置窗口置顶this.setAlwaysOnTop(true);5.设置窗口居中this.setLocationRelativeTo(null);传入 null 作为参数Swing 会自动计算屏幕尺寸让窗口在屏幕正中央打开不用手动计算坐标适配不同分辨率的屏幕。6.设置关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);这是窗口的核心配置之一EXIT_ON_CLOSE 表示点击窗口右上角的关闭按钮时直接退出整个程序避免程序在后台运行占用资源。WindowConstants 是 Swing 提供的常量类专门存储窗口相关的配置参数。登录 / 注册界面的差异说明登录界面 LoginJFrame 和注册界面 RegisterJFrame 的搭建逻辑与游戏主界面完全一致仅在窗口大小、标题两个属性上做了差异化调整以适配不同的功能需求类名窗口大小窗口标题核心用途LoginJFrame488 × 430拼图 登录用户登录入口后续添加账号 / 密码输入框RegisterJFrame488 × 500拼图 注册新用户注册入口适配更多注册输入项GameJFrame608 × 680拼图单机版 v1.0游戏核心窗口适配拼图图片展示程序入口类 APP最后是程序的唯一入口APP类仅包含main方法负责启动登录界面代码如下import puzzle_game.UI.GameJFrame; import puzzle_game.UI.LoginJFrame; import puzzle_game.UI.RegisterJFrame; public class APP { public static void main(String[] args) { //表示程序启动的入口 new LoginJFrame(); new RegisterJFrame(); new GameJFrame(); } }2.1.2菜单搭建在 Swing 中实现菜单栏需要用到三个核心组件层级关系清晰且不可混淆JMenuBar顶层菜单栏容器承载所有菜单是整个菜单体系的根JMenu具体菜单分类如 “功能”“关于我们”用于归类菜单项JMenuItem最小操作单元如 “重新游戏”“关闭游戏”是用户实际点击的选项。核心代码private void initJMenuBar() { //初始化菜单 //创建的整个菜单对象 JMenuBar jMenuBar new JMenuBar(); //创建菜单上的两个选项的对象功能 关于我们 JMenu functionJMenu new JMenu(功能); JMenu aboutJMenu new JMenu(关于我们); //创建选项下面的条目对象 JMenuItem replayItem new JMenuItem(重新游戏); JMenuItem reLoginItem new JMenuItem(重新登录); JMenuItem closeItem new JMenuItem(关闭游戏); JMenuItem accountItem new JMenuItem(公众号); //将每一个选项下面的条目添加到选项中 functionJMenu.add(replayItem); functionJMenu.add(reLoginItem); functionJMenu.add(closeItem); aboutJMenu.add(accountItem); //将菜单里面的两个选项添加到菜单中 jMenuBar.add(functionJMenu); jMenuBar.add(aboutJMenu); //给整个界面设置菜单 this.setJMenuBar(jMenuBar); }1.要严格按照JMenuBar → JMenu → JMenuItem的层级添加组件避免层级混乱导致菜单不显示。2.窗口绑定菜单栏必须使用this.setJMenuBar(jMenuBar)而非旧版 AWT 的setMenuBar()这是 Swing 中 JFrame 绑定菜单栏的标准方式兼容性更强3.代码模块化把菜单栏初始化抽离为private私有方法构造方法只负责界面基础配置结构更清晰符合 Java 开发规范。4.常见踩坑点总结组件类型混淆误将JMenu当作JMenuBar创建导致菜单无法加载绑定方法错误使用setMenuBar()替代setJMenuBar()出现菜单不显示问题未调用初始化方法编写了initJMenuBar()但未在构造方法中调用界面无菜单栏。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2493382.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!