图片匹配游戏

引用转载请注明出处,Thanks!

通过为标签空间添加图形以及鼠标事件,完成图片配对的游戏。[1]

JFrame 简介:

Swing的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame
类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。 JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Swing 包中最复杂的组件。为了最大程度地简化组件,在独立于操作系统的 Swing组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。Java 事件模型基础:监听器、事件、事件源、事件注册。

Java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。[2]

JFrame 测试:

HelloWorldSwing.java[3]

import javax.swing.*;
public class HelloWorldSwing {/**{* 创建并显示GUI。出于线程安全的考虑,* 这个方法在事件调用线程中调用。*/private static void createAndShowGUI() {// 确保一个漂亮的外观风格JFrame.setDefaultLookAndFeelDecorated(true);// 创建及设置窗口JFrame frame = new JFrame("HelloWorldSwing");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 添加 "Hello World" 标签JLabel label = new JLabel("Hello World");frame.getContentPane().add(label);// 显示窗口frame.pack();frame.setVisible(true);}public static void main(String[] args) {// 显示应用 GUIjavax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() {createAndShowGUI();}});}
}

配对游戏源码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;@SuppressWarnings("serial")
public class PictureMatchingFrame extends JFrame implements MouseListener,MouseMotionListener {private JLabel img[] = new JLabel[3];// 显示图标的标签private JLabel targets[] = new JLabel[3];// 窗体下面显示文字的标签private Point pressPoint; // 鼠标按下时的起始坐标public static void main(String args[]) {PictureMatchingFrame frame = new PictureMatchingFrame(); // 创建本类对象frame.setVisible(true); // 设置窗体为可视状态}public PictureMatchingFrame() {super();getContentPane().setLayout(new BorderLayout());setBounds(100, 100, 364, 312);setTitle("图片配对游戏");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JPanel imagePanel = new JPanel();imagePanel.setLayout(null);imagePanel.setOpaque(false);setGlassPane(imagePanel);getGlassPane().setVisible(true);ImageIcon icon[] = new ImageIcon[3];icon[0] = new ImageIcon(getClass().getResource("screen.png"));icon[1] = new ImageIcon(getClass().getResource("clothing.png"));icon[2] = new ImageIcon(getClass().getResource("bike.png"));final JPanel bottomPanel = new JPanel();bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 5));getContentPane().add(bottomPanel, BorderLayout.SOUTH);for (int i = 0; i < 3; i++) {img[i] = new JLabel(icon[i]); // 创建图像标签img[i].setSize(50, 50); // 设置标签大小img[i].setBorder(new LineBorder(Color.GRAY)); // 设置线性边框int x = (int) (Math.random() * (getWidth() - 50)); // 随机生成X坐标int y = (int) (Math.random() * (getHeight() - 150));// 随机生成Y坐标img[i].setLocation(x, y); // 设置随机坐标img[i].addMouseListener(this); // 为每个图像标签添加鼠标事件监听器img[i].addMouseMotionListener(this);imagePanel.add(img[i]); // 添加图像标签到图像面板targets[i] = new JLabel(); // 创建匹配位置标签targets[i].setOpaque(true); // 使标签不透明,以设置背景色targets[i].setBackground(Color.ORANGE); // 设置标签背景色targets[i].setHorizontalTextPosition(SwingConstants.CENTER); // 设置文本与图像水平居中targets[i].setVerticalTextPosition(SwingConstants.BOTTOM); // 设置文本显示在图像下方targets[i].setPreferredSize(new Dimension(80, 80)); // 设置标签首先大小targets[i].setHorizontalAlignment(SwingConstants.CENTER); // 文字居中对齐bottomPanel.add(targets[i]); // 添加标签到底部面板}targets[0].setText("显示器"); // 设置匹配位置的文本targets[1].setText("衣服");targets[2].setText("自行车");}public void mouseClicked(MouseEvent e) {}public void mouseMoved(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {pressPoint = e.getPoint(); // 保存拖放图片标签时的起始坐标}public void mouseReleased(MouseEvent e) {if (checkPosition()) { // 如果配对正确getGlassPane().setVisible(false);for (int i = 0; i < 3; i++) { // 遍历所有匹配位置的标签targets[i].setText("匹配成功"); // 设置正确提示targets[i].setIcon(img[i].getIcon()); // 设置匹配的图标}}}/*** 鼠标拖动控件时的事件处理方法*/public void mouseDragged(MouseEvent e) {JLabel source = (JLabel) e.getSource(); // 获取事件源控件Point imgPoint = source.getLocation(); // 获取控件坐标Point point = e.getPoint(); // 获取鼠标坐标source.setLocation(imgPoint.x + point.x - pressPoint.x, imgPoint.y+ point.y - pressPoint.y); // 设置控件新坐标}private boolean checkPosition() {// 检查配对是否正确boolean result = true;for (int i = 0; i < 3; i++) {Point location = img[i].getLocationOnScreen(); // 获取每个图像标签的位置Point seat = targets[i].getLocationOnScreen(); // 获取每个对应位置的坐标targets[i].setBackground(Color.GREEN); // 设置匹配后的颜色// 如果配对错误if (location.x < seat.x || location.y < seat.y|| location.x > seat.x + 80 || location.y > seat.y + 80) {targets[i].setBackground(Color.ORANGE); // 回复对应位置的颜色result = false; // 检测结果为false}}return result; // 返回检测结果}
}

引用:
[注释1]:JAVA开发实战1200例(第二卷)
[注释2]:JFrame:http://blog.csdn.net/Changer_Wu/article/details/51595165
[注释3]:SWing简介:http://www.runoob.com/w3cnote/java-swing-demo-intro.html

Java课程学习十一:图片匹配游戏相关推荐

  1. 一些关于Java课程学习下来的心得

    本学期是大三下学期,学校开设了Java课程,对于学习过C语言,Python两种语言的我,对于Java的总结基本可以浓缩成:比C语言丰富,但是比Python格式要求高,但是多种语言容易混淆,这次总结作业 ...

  2. Java课程设计—拿火柴小游戏

    这是我的Java课程设计,做的是拿火柴小游戏.要求是人机互拿火柴,拿到最后一根火柴者赢.最主要的就是处理好多线程,其他的就是添加组件啥的,那个不难,我就给出以下多线程的代码吧. 1 import ja ...

  3. java课程设计拼图_java拼图游戏课程设计报告

    java拼图游戏课程设计报告 砾寸椒涩藕矾糯陋捕炬洁困喘港划舟逃豺涌锤芳喜胺递龚乏埔跺摩实阿信颊立蹲稿船纽臃瘪自康嘱脖究绢术拱虑犹犀棉宜炙转鸦半甘哨疗墓暑蛊渤幽峭咀豺虫拘召饭莽畜穗篷姿钟逻捞跨瀑拿丈土 ...

  4. 《2018面向对象程序设计(java)课程学习进度条》

     学习收获最大的程序阅读或编程任务    课堂/课余学习时间(小时)    发布博客/评论他人博客数量   (阅读/编写)代码行数        周次                  九九乘法表   ...

  5. Java多线程学习十一:你知道哪几种锁?各有什么特点

    锁的 7 大分类 需要首先指出的是,这些多种多样的分类,是评价一个事物的多种标准,比如评价一个城市,标准有人口多少.经济发达与否.城市面积大小等.而一个城市可能同时占据多个标准,以北京而言,人口多,经 ...

  6. 对java这门课程的认识_关于java课程的总结

    前言 本次博客主要内容为此次三次作业的总结,整门java课程学习的总结,以及在此次java课程中的收获,和对课程的意见. 作业过程总结 第一次作业主要考察的是对程序的可扩展性,实现开闭原则非常重要,因 ...

  7. 模特赛马java课程设计_Thinking in Java---Concurrent包下的新构件学习+赛马游戏仿真...

    Java5的java.util.concurrent包下引入了大量的用于解决并发问题的新类:相对于前面那些基础的线程同步和通信的方法,这些新类是一种更高层次上的抽象,使用起来还是比较容易的.这篇博客就 ...

  8. JAVA程序连连看的项目总结,JAVA课程设计连连看游戏的开发

    JAVA课程设计连连看游戏的开发 计算机科学与工程学院集中性实践教学计划书( 2013 - 2014 学年第 1 学期)课程名称: 专业实习 姓 名: 学 号: 2010081303 专 业: 计算机 ...

  9. JAVA课程设计——“小羊吃蓝莓”小游戏

    JAVA课程设计--"小羊吃蓝莓"小游戏 1. 团队课程设计博客链接 http://www.cnblogs.com/HXY071/p/7061216.html 2. 个人负责模块或 ...

最新文章

  1. T-SQL LIKE子句 模糊查询
  2. OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()
  3. SpringBoot2.1.5 (24): @SpringBootTest单元测试
  4. 【报告分享】2022十大科技趋势-达摩院.pdf(附下载链接)
  5. 摩拜回应裁员传闻:属正常业务调整 部分岗位仍在招聘
  6. 当你输入一个网址的时候,实际会发生什么?(转)
  7. 大数据系列(hadoop) 集群环境搭建二
  8. 情人节,请带走我给您的祝福
  9. 【Java8】Function 讲解
  10. 文件比较命令(comp)
  11. Log-normal distribution对数正态分布
  12. jetty9 Form too large 异常解决方案
  13. 5G wifi 和 5G通信
  14. java dispatcher详解_Java Web开发详解:RequestDispatcher接口
  15. mc服务器常用指令_我的世界服务器指令大全 最新服务器指令汇总
  16. Java12个小练习_打印三角形_素数_利率_水仙花数_回文数
  17. 正则表达式匹配电话号码
  18. 互联网日报 | 美团市值超2000亿美元;蚂蚁集团完成A股上市辅导;微博快手纷纷宣布收购KPL战队...
  19. EXE工程和OCX工程的转化(2002/5/30 三金 版权所有)
  20. PDF文档的电子印章功能探究(三)

热门文章

  1. 焊接机器人电柜组成_焊接机器人的组成部分
  2. CTFSHOW 常用姿势篇(821-831)
  3. 静态时序分析简明教程(七)]端口延迟
  4. 06.SAGAN(Self-Attention Generative Adversarial Networks)
  5. 安卓手机通过Termux免Root运行Routersploit对路由器进行渗透【Rsf】【渗透工具】【Termux】
  6. Oracle数据库删除用户和删除表空间及常见错误解决
  7. 西门子PLC1200博途V16程序画面例程,具体项目工艺为制药厂生物发酵系统,程序内有报警,模拟量标定处理,温度PID,称重仪表USS通讯和基本的各种数字量控制
  8. [k8s 学习笔记]
  9. ICMPv6和ND协议介绍
  10. 每日新闻:中国母婴幼市场将达3万亿;基于内存计算技术的智能芯片问世;谷歌推图片压缩工具Squoosh;腾讯选定全球地图数据提供商...