1、/ Cell.javapackage cn.itcast.picture.ui;import javax.swing.Icon;import javax.swing.JButton;/* 图 片 小 方 格 类*/public class Cell extends JButton /带 有 图 片 的 小 方 格public Cell(Icon icon) super(icon);/设 置 小 方 格 大 小this.setSize(150, 150);/带 有 图 片 和 文 字 的 小 方 格public Cell(String text, Icon icon) super(text, i
2、con);/设 置 小 方 格 大 小this.setSize(150, 150);this.setHorizontalTextPosition(CENTER);/设 置 文 字 水 平 居 中 显 示this.setVerticalTextPosition(CENTER);/设 置 文 字 垂 直 居 中 显 示/public void move(String direction) switch (direction) case “UP“:this.setLocation(this.getBounds().x,this.getBounds().y-150);break;case “DOWN“
3、:this.setLocation(this.getBounds().x,this.getBounds().y+150);break;case “LEFT“:this.setLocation(this.getBounds().x-150,this.getBounds().y);break;case “RIGHT“:this.setLocation(this.getBounds().x+150,this.getBounds().y);break;default:break;/PictureCanvas.javapackage cn.itcast.picture.ui;import java.aw
4、t.Rectangle;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel;/* 拼 图 类*/public class PictureCanvas extends JPanel implements MouseListener /静 态 变 量public static int pictureID = 1;/图 片 IDpublic st
5、atic int stepNum = 0;/步 数private Cell cell;privateboolean hasAddActionListener= false;/表 示 是 否 为 小 方 格 添 加 了 点 击 监 听 ,有 为 trueprivate Rectangle nullCell;/构 造 方 法public PictureCanvas() initCanvas();/初 始 化public void initCanvas()/设 置 拼 图 区 的 位 置this.setLayout(null);/帧 布 局/创 建 12个 小 方 格 , 并 添 加 到 拼 图 区
6、cell = new Cell12;for(int i = 0;i comboBox;private JTextField name;public static JTextField step;private JButton start;/ 空 参 数 构 造 方 法public PictureMainFrame() /super();init();/界 面 初 始 化addComponent();/添 加 组 建addPreviewImage();/添 加 预 览 图 片 与 拼 图 图 片addActionListener();/为 组 建 添 加 事 件 监 听private void
7、addActionListener() /数 值 提 示addNumberInfo.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) /完 成 数 字 提 示 的 显 示canvas.reloadPictureAddNumber(););clearNumberInfo.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) /完 成 数 值 提
8、 示 的 清 除canvas.reloadPictureClearNumber(););comboBox.addItemListener(new ItemListener() Overridepublic void itemStateChanged(ItemEvent e) /获 取 选 择 图 片 的 序 号int num = comboBox.getSelectedIndex();/ 更 新 预 览 区PictureCanvas.pictureID = num+1;preview.repaint();/重 新 绘 制 预 览 区 界 面/更 新 拼 图 区canvas.removeAll(
9、);canvas.initCanvas();canvas.repaint();/ canvas.reloadPictureClearNumber();/更 新 游 戏 状 态 区name.setText(“图 片 名 称 : “+comboBox.getSelectedItem();PictureCanvas.stepNum = 0;step.setText(“步 数 : “+0);/更 新 按 钮 区clearNumberInfo.setSelected(true););start.addActionListener(new ActionListener() Overridepublic v
10、oid actionPerformed(ActionEvent e) / 更 新 游 戏 状 态 区 步 数 : 0PictureCanvas.stepNum = 0;step.setText(“步 数 : 0“);/将 小 方 格 位 置 随 机 打 乱canvas.start(););private void addPreviewImage() /创 建 面 板 , 包 含 拼 图 区 和 预 览 区JPanel panel = new JPanel();panel.setLayout(new GridLayout(1,2);/设 置 成 1X2的 表 格 布 局canvas = new
11、PictureCanvas();canvas.setBorder(new TitledBorder(“拼 图 区 “);preview = new PicturePreview();preview.setBorder(new TitledBorder(“预 览 区 “);panel.add(canvas,BorderLayout.WEST);panel.add(preview,BorderLayout.EAST);/-/把 面 板 显 示 在 主 界 面 中this.add(panel,BorderLayout.CENTER);private void addComponent() JPane
12、l panel = new JPanel();panel.setBackground(Color.PINK);panel.setLayout(new GridLayout(1, 2);JPanel leftPanel = new JPanel();leftPanel.setBackground(Color.PINK);leftPanel.setBorder(new TitledBorder(“按 钮 区 “);addNumberInfo = new JRadioButton(“数 字 提 示 “,false);addNumberInfo.setBackground(Color.PINK);cl
13、earNumberInfo = new JRadioButton(“清 楚 提 示 “,true);clearNumberInfo.setBackground(Color.PINK);comboBox = new JComboBox(items);comboBox.setPreferredSize(new Dimension(100, 24);start = new JButton(“开 始 “);start.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);start.setBackground(Color.PINK);Butt
14、onGroup buttonGroup = new ButtonGroup();buttonGroup.add(addNumberInfo);buttonGroup.add(clearNumberInfo);leftPanel.add(addNumberInfo);leftPanel.add(clearNumberInfo);leftPanel.add(new JLabel(“ 选 择 图 片 : “);leftPanel.add(comboBox);leftPanel.add(start);JPanel rightPanel = new JPanel();rightPanel.setBack
15、ground(Color.PINK);rightPanel.setBorder(new TitledBorder(“游 戏 状 态 “);rightPanel.setLayout(new GridLayout(1,2);name = new JTextField(“图 片 名 称 :小 女 孩 “);step = new JTextField(“步 数 : 0“);name.setEditable(false);step.setEditable(false);rightPanel.add(name, BorderLayout.WEST);rightPanel.add(step, BorderL
16、ayout.EAST);panel.add(leftPanel, BorderLayout.WEST);panel.add(rightPanel, BorderLayout.EAST);this.add(panel, BorderLayout.NORTH);private void init() this.setBounds(new Rectangle(150, 25, 1000, 720);this.setTitle(“拼 图 游 戏 “);this.setResizable(false);/设 置 窗 口 默 认 关 闭 操 作this.setDefaultCloseOperation(J
17、Frame.EXIT_ON_CLOSE);/PicturePreview.javapackage cn.itcast.picture.ui;import java.awt.Graphics;import java.awt.Image;import javax.swing.ImageIcon;import javax.swing.JPanel;/* 图 片 预 览 类*/public class PicturePreview extends JPanel /重 写 绘 制 当 前 组 件 方 法Overrideprotected void paintComponent(Graphics g) /
18、 TODO Auto-generated method stubsuper.paintComponent(g);/制 定 图 片 文 件 路 径String filename = “picture/“+PictureCanvas.pictureID+“.jpg“;/获 取 图 片 文 件 中 的 图 像ImageIcon icon = new ImageIcon(filename);Image image = icon.getImage();/把 图 像 绘 制 在 预 览 区 中g.drawImage(image, 20, 20, 450, 600, this);/ MainApp.javapackage cn.itcast.picture.app;import cn.itcast.picture.ui.PictureMainFrame;/* 启 动 器*/public class MainApp public static void main(String args) / 创 建 主 界 面PictureMainFrame frame=new PictureMainFrame();/显 示 界 面frame.setVisible(true);