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)】专栏,跟着一起写出这个小游戏

相关文章
|
10天前
|
数据采集 人工智能 Java
Java产科专科电子病历系统源码
产科专科电子病历系统,全结构化设计,实现产科专科电子病历与院内HIS、LIS、PACS信息系统、区域妇幼信息平台的三级互联互通,系统由门诊系统、住院系统、数据统计模块三部分组成,它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。
26 4
|
16天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
45 2
|
20天前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
34 3
|
26天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
61 3
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
14天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
5天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
4天前
|
安全 Java 开发者
Java中的多线程编程:从基础到实践
本文深入探讨了Java多线程编程的核心概念和实践技巧,旨在帮助读者理解多线程的工作原理,掌握线程的创建、管理和同步机制。通过具体示例和最佳实践,本文展示了如何在Java应用中有效地利用多线程技术,提高程序性能和响应速度。
28 1
|
12天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。