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

相关文章
|
6天前
|
JavaScript Java 测试技术
基于Java的智慧医疗服务平台系统设计和实现(源码+LW+部署讲解)
基于Java的智慧医疗服务平台系统设计和实现(源码+LW+部署讲解)
26 8
|
6天前
|
JavaScript Java 测试技术
基于Java的人事管理系统设计和实现(源码+LW+部署讲解)
基于Java的人事管理系统设计和实现(源码+LW+部署讲解)
18 7
|
6天前
|
JavaScript Java 测试技术
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
18 7
|
8天前
|
运维 Java BI
java云HIS系统源码,基层医院his系统
云HIS系统,基于B/S架构的SaaS服务,助力基层医院实现挂号、诊疗、电子病历、药品管理等全面业务。系统分为综合管理(运营商、开发者、监管使用)和业务系统(医院使用)。综合管理涉及运维、监管和运营,包括机构、药品、用户、角色等管理。业务系统涵盖预约、收费、医生护士工作站、住院、药房、会员管理及统计等功能。系统可整合公卫、PACS等,实现多机构融合。
java云HIS系统源码,基层医院his系统
|
12天前
|
JavaScript 前端开发 Java
Java数字化产科管理系统源码,多家医院应用案例,可直接上项目
Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等功能,与HIS等系统对接。采用前后端分离架构,Java语言,Vue前端,若依框架,MySQL数据库。优势在于提升就诊效率,降低漏检率,自动报表生成,减少重复工作,支持数据研究,并实现医院与卫计委平台的数据互通,打造全生育周期健康服务。
26 4
|
15天前
|
JavaScript 前端开发 Java
(JAVA)一套成熟在用的智能化产科电子病历系统,源码交付可直接上项目
在人类探索与人性化的产科管理系统的征途中,我们深知每一步都承载着对未来新生命健康与家庭幸福的深切关怀。
14 0
(JAVA)一套成熟在用的智能化产科电子病历系统,源码交付可直接上项目
|
9天前
|
JavaScript 前端开发 Java
Java语言+前后端分离 数字化产科管理平台 产科电子病历系统源码
Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等功能,与HIS等系统对接。采用前后端分离架构,Java语言,Vue前端,MySQL数据库。优势在于提升就诊效率,降低漏检率,自动报表生成,减少重复工作,支持数据研究,并实现医院与卫计委平台的数据互通,打造全生育周期健康服务。
9 0
|
6天前
|
Java 调度
Java线程的六种状态
Java线程有六种状态: 初始(NEW)、运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)。
20 1
|
7天前
|
存储 安全 Java
Java面试题:请解释Java内存模型(JMM)是什么,它如何保证线程安全?
Java面试题:请解释Java内存模型(JMM)是什么,它如何保证线程安全?
42 13
|
3天前
|
安全 Java 开发者
Java并发编程中的线程安全性与性能优化
在Java编程中,处理并发问题是至关重要的。本文探讨了Java中线程安全性的概念及其在性能优化中的重要性。通过深入分析多线程环境下的共享资源访问问题,结合常见的并发控制手段和性能优化技巧,帮助开发者更好地理解和应对Java程序中的并发挑战。 【7月更文挑战第14天】