代码一
package com.itheima_06;
public class App{
public static void main(String[] args) {
PictureFrame pf=new PictureFrame();
}
}
代码二
package com.itheima_06;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class PictureFrame extends JFrame {
private int[][] datas = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 0}
};
//定义两个int类型的变量,用于记录0号图片的位置
private int x0;
private int y0;
//定义上左下右,求助,重置按钮
private JButton shangButton;
private JButton zuoButton;
private JButton xiaButton;
private JButton youButton;
private JButton qiuzhuButton;
private JButton chongzhiButton;
//定义面板
private JPanel imagePanel;
public PictureFrame() {
//用于窗体的基本设置
initFrame();
//二维数组元素打乱
randomData();
//窗体上组件的绘制
paintView();
//给按钮添加事件
addButtonEvent();
//设置窗体可见
this.setVisible(true);
}
//移动的图形重新绘制
public void rePaintView(){
//移除面板上所有的组件
imagePanel.removeAll();
//遍历二维数组得到图片编号
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
//创建JLabel对象加载图片资源
JLabel imageLabel = new JLabel(new ImageIcon("itheima_picture_puzzle\\images\\" + datas[i][j] + ".png"));
//调整图片的位置
imageLabel.setBounds(j * 90, i * 90, 90, 90);
imagePanel.add(imageLabel);
}
}
// 把面板添加到窗体上
this.add(imagePanel);
//重新绘制窗体
imagePanel.repaint();
}
//给按钮添加事件
public void addButtonEvent(){
shangButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("上");
//边界处理
if(x0==3){
return;
}
//位置交换
datas[x0][y0]=datas[x0+1][y0];
datas[x0+1][y0]=0;
x0=x0+1;
//调用重绘的方法
rePaintView();
}
});
zuoButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("左");
}
});
xiaButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("下");
}
});
youButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("右");
}
});
qiuzhuButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("求助");
}
});
chongzhiButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("重置");
}
});
}
//二维数组元素打乱
public void randomData(){
Random r =new Random();
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
int x=r.nextInt(datas.length);
int y=r.nextInt(datas[i].length);
int temp =datas[i][j];
datas[i][j]=datas[x][y];
datas[x][y]=temp;
}
}
//记录0号图片的位置
wc:for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
if(datas[i][j]==0){
x0=i;
y0=j;
break wc;
}
}
}
System.out.println(x0+","+y0);
}
//窗体上组件的绘制
public void paintView() {
//标题图片
JLabel titleLabel = new JLabel(new ImageIcon("itheima_picture_puzzle\\images\\title.png"));
titleLabel.setBounds(354, 27, 232, 57);
this.add(titleLabel);
//定义一个二维数组用来存储图片的编号
// int[][] datas={
// {1,2,3,4},
// {5,6,7,8},
// {9,10,11,12},
// {13,14,15,16}
// };
//创建面板
imagePanel = new JPanel();
imagePanel.setBounds(150, 114, 360, 360);
imagePanel.setLayout(null);//取消面板的默认布局
//遍历二维数组得到图片编号
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
//创建JLabel对象加载图片资源
JLabel imageLabel = new JLabel(new ImageIcon("itheima_picture_puzzle\\images\\" + datas[i][j] + ".png"));
//调整图片的位置
imageLabel.setBounds(j * 90, i * 90, 90, 90);
imagePanel.add(imageLabel);
}
}
// 把面板添加到窗体上
this.add(imagePanel);
//动漫参照图
JLabel canZhaoTuLabel = new JLabel(new ImageIcon("itheima_picture_puzzle\\images\\canzhaotu.png"));
canZhaoTuLabel.setBounds(574, 114, 122, 121);
this.add(canZhaoTuLabel);
//上下左右按钮以及求助重置按钮
shangButton = new JButton(new ImageIcon("itheima_picture_puzzle\\images\\shang.png"));
shangButton.setBounds(732, 265, 57, 57);
this.add(shangButton);
zuoButton = new JButton(new ImageIcon("itheima_picture_puzzle\\images\\zuo.png"));
zuoButton.setBounds(650, 347, 57, 57);
this.add(zuoButton);
xiaButton = new JButton(new ImageIcon("itheima_picture_puzzle\\images\\xia.png"));
xiaButton.setBounds(732, 347, 57, 57);
this.add(xiaButton);
youButton = new JButton(new ImageIcon("itheima_picture_puzzle\\images\\you.png"));
youButton.setBounds(813, 347, 57, 57);
this.add(youButton);
qiuzhuButton = new JButton(new ImageIcon("itheima_picture_puzzle\\images\\qiuzhu.png"));
qiuzhuButton.setBounds(626, 444, 108, 45);
this.add(qiuzhuButton);
chongzhiButton = new JButton(new ImageIcon("itheima_picture_puzzle\\images\\chongzhi.png"));
chongzhiButton.setBounds(786, 444, 108, 45);
this.add(chongzhiButton);
//展示背景图
JLabel backgroundLabel = new JLabel(new ImageIcon("itheima_picture_puzzle\\images\\background.png"));
backgroundLabel.setBounds(0, 0, 960, 530);
this.add(backgroundLabel);
}
//用于窗体的基本设置
public void initFrame() {
//窗体大小
this.setSize(960, 565);
//窗体标题
this.setTitle("动漫拼图");
//窗体居中
this.setLocationRelativeTo(null);
//窗体关闭时退出程序
this.setDefaultCloseOperation(3);
//窗体要位于其他窗口之上
this.setAlwaysOnTop(true);
//取消窗体默认布局
this.setLayout(null);
}
}
执行结果