1.美化界面
添加背景图片


所以我们添加背景图片要放在后面添加
添加图片边框



绝对路径:![]()
相对(模块)路径:
![]()

第一个是绝对路径,第二个是相对路径,但是斜杠的方向不对
总结:

2.图片移动

先实现KeyListener接口,然后:

然后找到空白图片的二维坐标,再然后设置键盘监听,接着清空图片,再刷新图片,最后再调用初始化图片方法



注意:忘记了按键对应的数字可以这样:

总结:

我都使用了removeAll()并重新添加组件了,为什么还需要 repaint() 呢?
✅ 原因分析:removeAll() 并不会立即刷新界面
在 Java Swing 中,UI 是懒惰更新的。也就是说:
-
removeAll()和add()等只是修改了组件层级结构; -
但 不会立刻触发重绘,也不会立即反映到屏幕上;
-
除非显式调用:
-
repaint()(请求重绘)或 -
revalidate()(重新布局)
-
否则用户可能看不到更新效果,或界面残留旧图。
没有revalidate()会出现什么问题吗
在大多数简单的情况下(比如你用的是 绝对布局this.setLayout(null)),没有
revalidate()通常也不会出明显问题,因为你不是依赖布局管理器来自动安排组件,而是自己用setBounds()定位了每一个组件。
但 —— 如果你将来换成 布局管理器(如 BorderLayout、FlowLayout 等),或者你添加的是动态组件(比如切换面板、动态 UI),没有 revalidate() 就可能出问题,比如:
❌ 可能出现的问题:
| 问题 | 描述 |
|---|---|
| 组件位置/大小不更新 | 如果你改变了组件位置或尺寸但没有 revalidate(),布局管理器不知道要重新安排 |
| 新添加的组件不显示 | 添加组件后没有 revalidate(),有些布局不会重新计算,不会显示新组件 |
| 删除组件后仍然占位 | 删除了组件但没 revalidate(),可能布局器还认为它存在 |
3.查看完整图片,作弊码,判断胜利
完整图片:
设置一个键按下不松看文字图片,同时松开要重新调用初始化图片方法
作弊码:
设置w键然后给出正确的图片顺序然后调用初始化图片方法即可

判断胜利:

胜利后还要禁止键盘的输入
4.计步和菜单业务实现
计步:

它也属于JLabel管理容器
菜单业务实现:
重新开始:

重新登录:
关闭当前游戏界面
打开登录界面
关闭游戏:

关于我们:

弹框对象JDialog

5.输入框对象JTextFiled和JPasswordField
![]()
![]()
都类似于JLabel,直接添加到界面中,this.getContentPane().add();
6.按钮对象JButton

都类似于JLabel,直接添加到界面中,this.getContentPane().add();
为什么按钮对象login再次调用setIcon()后不需要刷新页面repaint()?
因为 Swing 的 JButton(或任何 AbstractButton)在内部已经实现了自动刷新机制,当你调用 setIcon() 时,它会自动调用 repaint() 来刷新界面显示。
🚫 什么时候才需要手动 repaint()?
只有在你直接操作组件内部状态,而不是通过 setter 方法修改,比如:
-
修改组件上的自绘图形;
-
动态移除或添加子组件(如
JPanel.add()); -
清空整个窗口再重新绘制(如你之前用的
removeAll()); -
直接改变模型数据但不触发事件的情况。






![[spring] spring 框架、IOC和AOP思想](https://i-blog.csdnimg.cn/direct/206b161627a7466e8fb0f288b549f2e7.png)


![[浏览器]缓存策略机制详解](https://i-blog.csdnimg.cn/direct/e7f339e8e5d94ae0929382d2304ad96e.png)






![[CSS3]rem移动适配](https://i-blog.csdnimg.cn/img_convert/ec792de657ca2fcb7d01d5a750caec68.png)


