拼图小游戏(练手项目)(GUI)
主界面
组件
JFrame 最外层窗体
JMenu 最上层菜单
JLabel 管理文字和图片的容器
练习
答案
创建文件
ui 表示界面
用到了JFrame包
package com.itheima.ui;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
//1.创建一个游戏的主界面
JFrame gameJframe = new JFrame();
gameJframe.setSize(603, 680);//默认创建界面不显示,所以需要更改
gameJframe.setVisible(true);
//2.创建一个登录界面
JFrame loginJframe = new JFrame();
loginJframe.setSize(488, 430);
loginJframe.setVisible(true);
//3.创建一个注册界面
JFrame regionJframe = new JFrame();
regionJframe.setSize(488, 500);
regionJframe.setVisible(true);
}
}
表示当前方法已过时
补充知识
构造方法
在Java中,当在类中定义一个方法的方法名与类名相同的时候,这个方法就被称为构造方法。
构造方法用于创建对象并初始化对象的状态。它会在对象创建时自动调用,并且只会被调用一次。
构造方法的方法名必须与类名完全相同,不能有返回值,也不能声明为static。构造方法可以有多个,根据参数的不同来区分。
通常情况下,我们在类中定义构造方法是为了方便对象的创建和初始化。当我们使用new关键字创建一个对象时,就会自动调用该类的构造方法来初始化对象的状态。
菜单制作
- 创建JMenuBar
- 创建Jmenu
- 在创建JMenuItem
- 把JMenuItem放到Jmenu里面
- 把Jmenu放到JMenuBar中
- 最后把JMenuBar添加到整个Jframe中
练习
private void initJmenuBar() {
//初始化菜单
//创建整个菜单对象
JMenuBar jMenuBar = new JMenuBar();
//创建菜单上两个选项的对象(功能 关于我们)
JMenu functionMenu = new JMenu("功能");
JMenu aboutJMenu = new JMenu("关于我们");
//创建选项下的条目对象
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登陆");
JMenuItem closeItem = new JMenuItem("关闭游戏");
JMenuItem accountItem = new JMenuItem("公众号");
//将每一个选项的条目添加到选项中
functionMenu.add(replayItem);
functionMenu.add(reLoginItem);
functionMenu.add(closeItem);
aboutJMenu.add(accountItem);
//将菜单里面的两个选项添加到菜单中
jMenuBar.add(functionMenu);
jMenuBar.add(aboutJMenu);
//给整个界面设置菜单
this.setJMenuBar(jMenuBar);
}
补充知识
CTRL alt M 快速创建方法
添加图片
Jlabel 管理区域
ImageIcon
组件
private void initImage() {
int number = 1;
//外循环--表示在把内循环重复执行4次
for (int i = 0; i < 4; i++) {
//内循环-- 表示在一行添加4张图片
for (int j = 0; j < 4; j++) {
//创建JLable的对象(管理容器)
JLabel jLabel = new JLabel(new ImageIcon("D:\\GoWorks\\JavaWorks\\puzzlegame\\image\\animal\\animal3\\"+number+".jpg"));
//指定图片位置
jLabel.setBounds(105 * j, 105 * i, 105, 105);
//把容器添加到界面中
this.getContentPane().add(jLabel);
number++;
}
}
打乱图片顺序
二维数组
练习
private void initData() {
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
//获取随机索引
int index = r.nextInt(tempArr.length);
//拿着遍历的每个数据,跟索引上的数据进行交换
int temp = tempArr[i];
tempArr[i] = tempArr[index];
tempArr[index] = temp;
}
for (int i = 0; i < tempArr.length; i++) {
data[i/4][i%4] = tempArr[i];
}
}
补充知识
事件
- 事件源:按钮 图片 窗口
- 事件: 某些操作 如:鼠标单击 鼠标划入
- 绑定监听:当事件源上发生了某件事,则执行某段代码
KeyListener 键盘监听 MouseListener 鼠标监听 ActionListener 动作监听
设置事件
第一种:
直接在一个文件中实现接口
package Test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Testified {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
//设置界面的宽高
jFrame.setSize(603, 680);//默认创建界面不显示,所以需要更改
//设置界面的标题
jFrame.setTitle("拼图单机版 v1.0");
//设置界面置顶
jFrame.setAlwaysOnTop(true);
//设置界面居中
jFrame.setLocationRelativeTo(null);
//设置关闭模式
jFrame.setDefaultCloseOperation(3);
//取消默认的居中放置,只有取消了才会按照XY轴形式添加组件
jFrame.setLayout(null);
//创建按钮对象
JButton jtb = new JButton("点我啊");
//设置位置宽高
jtb.setBounds(0, 0, 100, 50);
//给按钮添加监听
//jtb:组件对象表示要给哪个组件添加事件
//addActionListener:表示我要给组件添加那个事件监听(监听动作包括鼠标左击点击,空格)
//参数:表示事件被触发后要执行的代码
jtb.addActionListener(new MyAcctionListener());
//把按钮添加到界面中
jFrame.getContentPane().add(jtb);
jFrame.setVisible(true);
}
}
第二种:利用匿名内部类实现方法