思路:
1.使类实现MouseLisner接口,创建未重写的方法,主要重写MousePressed方法
2.在按钮上添加鼠标监听
3.在方法中实现业务逻辑
1
public class GamePanel extends JPanel implements MouseListener
还需继承JPanel类
2.
for(int i = 0;i<btns.length;i++){
btns[i] = new JButton(icons[order[i]]);//创建按钮时指定图片
btns[i].addMouseListener(this);//在按钮上添加鼠标监听 this表示当前对象 用当前对象监听器
add(btns[i]);
}
3.
思路
1.获取鼠标点击的具体按钮
2.根据按钮的位置及空白图片按钮的位置确定是否可以移动
3.判断是否拼图成功
public void mousePressed(MouseEvent e) {
//1.得到单击按钮的下标值k
int k = 0;//赋值0是为了能过语法检查,实际上在运行中k的值肯定会被覆盖
for(int i = 0;i<btns.length;i++){
if(e.getSource()==btns[i]){
k=i;
break;//得到值后立马跳出
}
}
// System.out.println("单击按钮下标"+k);
//2.检测移动方向并处理
//btns[k-n]是btns[k]的上一行按钮
if(k>=n&&btns[k-n].getIcon()==null){//能够向上
btns[k-n].setIcon(btns[k].getIcon());
btns[k].setIcon(null);
}else if(k<n*(n-1)&&btns[k+n].getIcon()==null){//向下
btns[k+n].setIcon(btns[k].getIcon());
btns[k].setIcon(null);
}else if(k%n!=n-1&&btns[k+1].getIcon()==null){//向右
btns[k+1].setIcon(btns[k].getIcon());
btns[k].setIcon(null);
}else if(k%n!=0&&btns[k-1].getIcon()==null){//左
btns[k-1].setIcon(btns[k].getIcon());
btns[k].setIcon(null);
}
//3.判断是否成功
if(isSuccess()){
JOptionPane.showMessageDialog(null, "success!");//弹出
}
}
private boolean isSuccess() {
boolean flag=true;
for(int i = 0;i<btns.length;i++){
if(btns[i].getIcon()!=icons[i]){//若发现图片顺序未对应
flag=false;
break;
}
}
return flag;
}