📄 myjpanel2.java
字号:
//package pt2;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
/*public class MyJFrame {
JFrame jf;
MyJPanel2 mj;
public void init(){
mj=new MyJPanel2();
jf=new JFrame();
jf.add(mj);
mj.init(3);
jf.setSize(450,337);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MyJFrame().init();
}
}*/
public class MyJPanel2 extends JPanel implements MouseListener {
JButton[] jb;
Image img;
Image img2;
BufferedImage bimg;
BufferedImage[] bufimg, bufimg2;
Graphics gs;
int dx, dy;
ImageIcon[] icons, icons2;
int[][] map;
JPanel jp0;
JPanel jp_bs = new JPanel();
JLabel jl_bs = new JLabel("步数");
JTextField jtf_bs = new JTextField("0", 4);
// -----------
MyJPanel mjp;
// ---------------
int bs2 = 0;
int no2 = 3;
// -------------------------------------
boolean running2 = false, jixu2 = true, move2 = false,shengli2=false;
public MyJPanel2() {
setLayout(new BorderLayout());
jp_bs.add(jl_bs);
jp_bs.add(jtf_bs);
add(jp_bs, "South");
}
public void init(int n, String s) {
no2 = n;
// ------
jp0 = new JPanel(new GridLayout(n, n));
add(jp0, "Center");
// ----------------------
map = new int[n][n];
jb = new JButton[n * n];
icons = new ImageIcon[n * n];
icons2 = new ImageIcon[n * n];
bufimg = new BufferedImage[n * n];
bufimg2 = new BufferedImage[n * n];
// setLayout(new GridLayout(n,n));
for (int i = 0; i < n * n; i++) {
jb[i] = new JButton();
jb[i].addMouseListener(this);
jp0.add(jb[i]);
}
// bimg2=bimg.getSubimage(0,0,dx,dy);
// ii.setImage(bimg2);
// ---
// --------
img = getToolkit().getImage(s);
MediaTracker mt = new MediaTracker(this);
mt.addImage(img, 0);
try {
mt.waitForAll();
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
dx = img.getWidth(this) / n;
dy = img.getHeight(this) / n;
bimg = new BufferedImage(img.getWidth(this), img.getHeight(this),
BufferedImage.TYPE_INT_ARGB);
gs = bimg.getGraphics();
gs.drawImage(img, 0, 0, this);
// -----------------
for (int i = 0; i < n * n; i++) {
icons[i] = new ImageIcon();
icons2[i] = new ImageIcon();
bufimg[i] = new BufferedImage(img.getWidth(this) / n-11, img
.getWidth(this)
/ n-55, BufferedImage.TYPE_INT_ARGB);
bufimg2[i] = new BufferedImage(img.getWidth(this) / n-11, img
.getWidth(this)
/ n-55, BufferedImage.TYPE_INT_ARGB);
}
// -------
int temp, x1, y1, x2, y2;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map[i][j] = i * n + j;
}
}
for (int i = 0; i < 100; i++) {
java.util.Random rnd = new java.util.Random(); // 创建随机发生器
x1 = rnd.nextInt(n); // 产生0-n之间的随机数
x2 = rnd.nextInt(n);
y1 = rnd.nextInt(n);
y2 = rnd.nextInt(n);
// 交换两个图像块的位置
temp = map[x1][y1];
map[x1][y1] = map[x2][y2];
map[x2][y2] = temp;
}
// moveMap(n);
// --------------------
// initMap(n,s);
}
public void paintComponent(Graphics g) {
if (running2) {
moveMap(no2);
for (int i = 0; i < no2 * no2; i++)
jb[i].setIcon(icons[i]);
} else {
moveMap(no2);
for (int i = 0; i < no2 * no2; i++)
jb[i].setIcon(icons2[i]);
}
if(shengli2){
System.out.println("adsf");
}
}
// public void initMap(int n,String s){
// }
public void moveMap(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
bufimg[i * n + j] = bimg.getSubimage(map[i][j] % n * dx,
map[i][j] / n * dy, dx, dy);
// icons[i*n+j]=new ImageIcon();
icons[i * n + j].setImage(bufimg[i * n + j]);
bufimg[i * n + j] = bimg.getSubimage(j * dx, i * dy, dx, dy);
icons2[i * n + j].setImage(bufimg[i * n + j]);
}
}
}
public void mouseClicked(MouseEvent arg0) {
// TODO 自动生成方法存根
}
public void mouseEntered(MouseEvent arg0) {
// TODO 自动生成方法存根
}
public void mouseExited(MouseEvent arg0) {
// TODO 自动生成方法存根
}
public void mousePressed(MouseEvent e) {
if (move2) {
for (int i = 0; i < no2 * no2; i++) {
if (e.getSource() == jb[i]) {
int sx, sy, temp;
sx = i / no2;
sy = i % no2;
temp = map[sx][sy];
map[sx][sy] = map[0][0];
map[0][0] = temp;
}
}
repaint();
bs2++;
jtf_bs.setText("" + bs2);
shengFu2();
}
}
public void mouseReleased(MouseEvent arg0) {
}
public void shengFu2() {
int pd = 0;
for (int i = 0; i < no2; i++) {
for (int j = 0; j < no2; j++) {
if (map[i][j] == i * no2 + j) {
pd++;
}
System.out.println(pd);
}
}
if (pd == no2 * no2) {
System.out.println("胜利");
jixu2 = false;
move2 = false;
shengli2=true;
JOptionPane.showMessageDialog(this, "恭喜您获胜!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -