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

相关文章
|
2天前
|
JavaScript 安全 Java
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
27 12
|
6天前
|
人工智能 监控 安全
Java智慧工地(源码):数字化管理提升施工安全与质量
随着科技的发展,智慧工地已成为建筑行业转型升级的重要手段。依托智能感知设备和云物互联技术,智慧工地为工程管理带来了革命性的变革,实现了项目管理的简单化、远程化和智能化。
28 4
|
24天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 6
|
25天前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
42 6
|
2月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
1321 1
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
安全 Java
Java并发编程笔记之CopyOnWriteArrayList源码分析
并发包中并发List只有CopyOnWriteArrayList这一个,CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作和元素迭代操作都是在底层创建一个拷贝数组(快照)上进行的,也就是写时拷贝策略。
19568 0
|
Java 安全
Java并发编程笔记之读写锁 ReentrantReadWriteLock 源码分析
我们知道在解决线程安全问题上使用 ReentrantLock 就可以,但是 ReentrantLock 是独占锁,同时只有一个线程可以获取该锁,而实际情况下会有写少读多的场景,显然 ReentrantLock 满足不了需求,所以 ReentrantReadWriteLock 应运而生,ReentrantReadWriteLock 采用读写分离,多个线程可以同时获取读锁。
3154 0
|
Java
Java并发编程笔记之FutureTask源码分析
FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过FutureTask的get方法异步获取执行结果,因此,FutureTask非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。
4309 0
|
Java 调度 API
Java并发编程笔记之Timer源码分析
timer在JDK里面,是很早的一个API了。具有延时的,并具有周期性的任务,在newScheduledThreadPool出来之前我们一般会用Timer和TimerTask来做,但是Timer存在一些缺陷,为什么这么说呢?   Timer只创建唯一的线程来执行所有Timer任务。
3026 0

热门文章

最新文章