当前位置: 首页 > news >正文

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 中实现菜单栏,需要用到三个核心组件,层级关系清晰且不可混淆:

  1. JMenuBar:顶层菜单栏容器,承载所有菜单,是整个菜单体系的根;
  2. JMenu:具体菜单分类,如 “功能”“关于我们”,用于归类菜单项;
  3. 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.jsqmd.com/news/603464/

相关文章:

  • 肝病医生丁殿西:陕西地区肝病诊疗专家甄选参考 - 深度智识库
  • G-Helper技术指南:华硕笔记本显示配置与性能优化全解析
  • 2026最新无尘车间源头厂家推荐排行榜:净化厂房/无尘车间/洁净车间/工业厂房/冷库优质服务商权威甄选净化厂房/无尘车间/洁净车间/工业厂房/冷库公司推荐 - 深度智识库
  • GLM-4V-9B镜像免配置优势:无需手动编译、零依赖安装、开箱即用体验
  • 算力殖民主义:软件测试从业者视角下的全球脑资源掠夺
  • 3分钟掌握AppImageLauncher:让Linux用户轻松管理应用的开源工具
  • 多微电网纳什议价机制的分布式协同优化实现解析
  • OpenClaw技能市场巡礼:Top10Qwen3.5-9B增强插件测评
  • Windows远程桌面多用户访问终极指南:RDPWrap免费解决方案
  • 健壮的容错机制:让Agent优雅降级与自动恢复
  • 新手福音:用快马AI生成你的第一个简易网页网盘项目
  • 如何用交换机命令行创建 VLAN(轻松秒懂)
  • 18 华夏之光永存:华为破局(架构师级)- 鸿蒙应用沙箱突破风险与内核级防护机制
  • DxWrapper:现代Windows系统中老游戏兼容性解决方案
  • PHP爬虫框架大比拼
  • Ubuntu20.04下Pangolin与视觉SLAM环境搭建的常见问题及解决方案
  • 【蓝桥杯真题】2026/4/7【前缀和】
  • 基于IEEE33节点的节点碳势计算与可视化 摘要:代码主要是基于IEEE33节点这个标准算例
  • 2026甘肃施工总承包资质代办行业观察:合规、本地化与效率定义下的服务商优选 - 深度智识库
  • 猫抓:高效全平台网页资源嗅探与下载解决方案
  • 叶凡同学结局揭秘
  • 如何解决百度网盘提取码获取难题:baidupankey工具全解析
  • C++ 拷贝构造函数深度解析:从浅拷贝到深拷贝
  • 英语考试词汇—计算机等级考试—软件设计师考前备忘录—东方仙盟
  • 3月必看:空调机组厂家口碑推荐新鲜出炉!新风机组/散热器/翅片管/干冷器/表冷器/工业暖风机,空调机组厂家口碑推荐 - 品牌推荐师
  • 2026 年甘肃施工总承包资质代办机构甄选指南 靠谱可靠实力强服务适配全场景 - 深度智识库
  • 终极指南:5分钟快速实现Arduino设备无缝接入Home Assistant的完整教程
  • Java 线上 CPU 100%,大部分人第一步就走错了方向
  • HEOI 游玩玄学记
  • 2026年西安专业空调回收厂家推荐:废旧中央空调/商用机组/家用电器环保处置优选 - 品牌推荐官