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

java23

1.美化界面

添加背景图片

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

添加图片边框

绝对路径:

相对(模块)路径:

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

总结:

2.图片移动

先实现KeyListener接口,然后:

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

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

总结:

我都使用了removeAll()并重新添加组件了,为什么还需要 repaint() 呢?


✅ 原因分析:removeAll() 并不会立即刷新界面

在 Java Swing 中,UI 是懒惰更新的。也就是说:

  • removeAll()add() 等只是修改了组件层级结构;

  • 不会立刻触发重绘,也不会立即反映到屏幕上;

  • 除非显式调用:

    • repaint()(请求重绘)或

    • revalidate()(重新布局)

否则用户可能看不到更新效果,或界面残留旧图。

没有revalidate()会出现什么问题吗

在大多数简单的情况下(比如你用的是 绝对布局this.setLayout(null)),没有 revalidate() 通常也不会出明显问题,因为你不是依赖布局管理器来自动安排组件,而是自己用 setBounds() 定位了每一个组件。

但 —— 如果你将来换成 布局管理器(如 BorderLayoutFlowLayout 等),或者你添加的是动态组件(比如切换面板、动态 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());

  • 直接改变模型数据但不触发事件的情况。

http://www.lryc.cn/news/2387176.html

相关文章:

  • 嵌入式工程师常用软件
  • LitCTF2025 WEB
  • Redisson WatchDog会一直续期吗?
  • Linux 下VS Code 的使用
  • Android开发namespace奇葩bug
  • watchEffect
  • Qt 布局管理器的层级关系
  • Android 之 kotlin 语言学习笔记一
  • maven模块化开发
  • 为什么要使用stream流
  • 语义分割的image
  • 云原生安全之网络IP协议:从基础到实践指南
  • C++——QT 文件操作类
  • 【排错】kylinLinx环境python读json文件报错UTF-8 BOM
  • [spring] spring 框架、IOC和AOP思想
  • LInux—shell编程
  • 尚硅谷redis7 37-39 redis持久化之AOF简介
  • GitLab 备份所有仓库(自动克隆)
  • [浏览器]缓存策略机制详解
  • Vue修饰符全解析
  • OpenCV CUDA 模块图像过滤-----创建一个计算图像导数的滤波器函数createDerivFilter()
  • 计算机视觉与深度学习 | Python实现CEEMDAN-ABC-VMD-DBO-CNN-LSTM时间序列预测(完整源码和数据)
  • AWS関連職種向け:日本語面接QA集
  • 【Macos】安装前端环境rust+node环境
  • (01)华为GaussDB((基于PostgreSQL))高斯数据库使用记录,dbeaver客户端配置高斯驱动,连接高斯数据库
  • ARM Linux远程调试
  • day24Node-node的Web框架Express
  • Webpack和Vite构建工具有什么区别?各自的优缺点是什么
  • 让MySQL更快:EXPLAIN语句详尽解析
  • 基于谷歌浏览器的Web Crypto API生成一对2048位的RSA密钥(公钥+私钥),并以JSON格式(JWK)打印到浏览器控制台