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()
); -
直接改变模型数据但不触发事件的情况。