Java实现拼图小游戏(5)—— 美化界面(含源码阅读)

简介: 先加载的图片在上方,后加载的图片在下方,所以我们要把创建背景图的代码放在我们之前创建十五个小图片的代码后面,否则会出现背景图片将我们要拼的图片覆盖的情况

一、前言


在了解完了三种监听事件后,接下来我们要把监听事件正式运用到到拼图小游戏中,但是在绑定监听事件以前,我们要先对这个游戏界面进行美化,让它的界面不再是光秃秃的,在实际开发过程中也不用担心图片设计的问题,一般会交给UI设计的小伙伴来完成(如果是一个人完成一个项目的话…那当我没说)话不多说,我们进入今天的主题


二、添加背景图


1.注意事项


  • 由于要添加背景图片,所以这里所有的代码都要写在 initImage() 方法内
  • 这里要注意:先加载的图片在上方,后加载的图片在下方,所以我们要把创建背景图的代码放在我们之前创建十五个小图片的代码后面,否则会出现背景图片将我们要拼的图片覆盖的情况(如下图)


552ff8064c1e4b1caafeeb94f4372dcf.png


2.创建图片对象


如果这一步不会的话,可以看【Java实现拼图小游戏(3)—— 添加图片(含JFrame源码阅读)】回顾一下


ImageIcon bg = new ImageIcon("图片路径")


3.创建JLabel的对象(一个用来放图片的容器)


JLabel background = new JLabel(bg)


4.调整位置


这里小伙伴可以自己调整一下之前添加图片的位置和背景图片的位置,不一定要按照我的来写,之前添加的图片一定要调整使其放在背景图片内


background.setBounds(42,21,508,560);


5.将容器放到界面中


  • 注意:隐藏容器要手动获取,图片放在这个隐藏容器中,默认图片放在正中间,所以我们要取消默认设置,并以 XY 轴坐标形式来存放图片


  • 取消默认设置图片放置位置已经在initJFrame()方法中写了,所以我们不需要再写一遍


  • 手动获取隐藏容器:getContentPane()


  • 获取隐藏容器后还要再向容器内添加JLabel的对象


this.getContentPane().add(background);


6.优化代码


这里可以把2、3步的代码合在一起,如果分开写也是完全可以的


JLabel background = new JLabel(new ImageIcon("图片路径"));


三、添加边框


1.查看源码


  • 使用setBorder()来实现设置边框
  • 选中 setBorder 后 Ctrl+B跟进查看源码


5fd6e8fb0ce7452faad9c17b78b80556.png


  • 再选中Border后跟进,发现这是一个接口


20f4ce1f3e99436687d29ae551163afe.png


2.查看API帮助文档


搜索一下Border来查看一下它有哪些实现类,这么多的实现类看的眼花缭乱,那么我们就点开来看看。哪个是我们需要的,这里我们选择 BevelBorder来实现我们添加边框的效果


25ebec17a0b143d6a9a6f7989df0ffeb.png


3.查看BevelBorder方法


Modifier and Type Method and Description
int getBevelType() 返回斜角边框的类型
Insets getBorderInsets(Component c, Insets insets) 初始化参数和边界的插图插图
Color getHighlightInnerColor() 返回斜角边框的内部突出显示颜色
Color getHighlightInnerColor(Component c) 当渲染到指定的组件时,返回斜角边框的内部突出显示颜色
Color getHighlightOuterColor() 返回斜角边框的外部突出显示颜色
Color getHighlightOuterColor(Component c) 当渲染到指定的组件时,返回斜角边框的外部突出显示颜色
Color getShadowInnerColor() 返回斜角边框的内部阴影颜色
Color getShadowInnerColor(Component c) 当渲染到指定的组件时,返回斜角边框的内部阴影颜色
Color getShadowOuterColor() 返回斜角边框的外部阴影颜色
Color getShadowOuterColor(Component c) 当渲染到指定的组件时返回斜角边框的外部阴影颜色
boolean isBorderOpaque() 返回是否边框是不透明的
void paintBorder(Component c, Graphics g, int x, int y, int width, int height) 用指定的位置和大小绘制指定组件的边框


4.阅读BevelBorder源码


由于我们不知道括号内传递的是什么参数,所以最直接的方法就是去看源码!

我们的代码如下,但是打问号的地方我们只知道是int类型的参数,但是具体该填哪个数字我们不知道,那么就去看看源码


jLabel.setBorder(new BevelBorder(???));


选中BevelBorder后跟进查看源码


c2935f1c0148497d98e1fdb544417bb9.png


this关键字调用本类中的对象,那么我们 选中this后的bevelType再跟进一次


e199733253314f7aba501899043c9aa0.png


一共两个参数,对应效果也有体现,或许光看描述不知道哪个更好看,那么都试验一下


参数为1


397a4a4bc9134103886c7514f4dd1917.png


参数为0


108d87dbfa03440e9011c6e6917cd324.png


我们选择自己喜欢的就好,这里我选择了参数为0


四、完整代码


  private void initImage() {
        //添加十五张小图片
        for(int i = 0; i < 4; i++){
            for(int j = 0; j < 4; j++){
                int number = data[i][j];
                JLabel jLabel = new JLabel(new ImageIcon("F:\\IDEA\\PuzzleGame\\image\\image\\animal\\animal3\\"+ number +".jpg"));
                //设置小图片的位置及大小
                jLabel.setBounds(105 * j + 85, 105 * i + 115,105,105);
                //设置边框效果
                jLabel.setBorder(new BevelBorder(0));
                //将图片添加到界面中
                this.getContentPane().add(jLabel);
            }
        }
        //添加背景图片
        JLabel background = new JLabel(new ImageIcon("F:\\IDEA\\PuzzleGame\\image\\image\\background.png"));
        //设置背景图片位置及大小
        background.setBounds(42,21,508,560);
        //将背景图片添加到界面中
        this.getContentPane().add(background);
    }


五、结语


接下来的文章就要实现移动图片的效果了!!!也可以把之前学习的绑定监听事件运用到实际开发中,最后如果是第一次看到这篇文章的小伙伴对拼图小游戏感兴趣的话可以点击查看【拼图小游戏(Java)】专栏,跟着一起写出这个小游戏

相关文章
|
28天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
62 7
|
2月前
|
数据采集 人工智能 Java
Java产科专科电子病历系统源码
产科专科电子病历系统,全结构化设计,实现产科专科电子病历与院内HIS、LIS、PACS信息系统、区域妇幼信息平台的三级互联互通,系统由门诊系统、住院系统、数据统计模块三部分组成,它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。
35 4
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
87 2
|
10天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
20天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
102 13
|
2月前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
57 12
|
28天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
30天前
|
人工智能 移动开发 安全
家政上门系统用户端、阿姨端源码,java家政管理平台源码
家政上门系统基于互联网技术,整合大数据分析、AI算法和现代通信技术,提供便捷高效的家政服务。涵盖保洁、月嫂、烹饪等多元化服务,支持多终端访问,具备智能匹配、在线支付、订单管理等功能,确保服务透明、安全,适用于家庭生活的各种需求场景,推动家政市场规范化发展。
|
9天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者