小弟  想写个蜘蛛牌游戏  可是到对扑克进行拖拽时   却有重影  好似我拖动一个牌时从左上角会出现一个一摸一样的牌   就像拖动一个牌  有两个牌都在响应       不知为何  请高人指点  小弟将不胜感激
        代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;public class Spider extends JButton{

static Spider[] spiders = new Spider[104];
public static final int WEIGHT=71;
public static final int HEIGHT=96;
int x;
int y;
//private static Spider spider=this;
Rectangle rac;
static Table table =null;
static String[] imaName={"images/1-1.gif","images/1-2.gif","images/1-3.gif","images/1-4.gif","images/1-5.gif",
"images/1-6.gif","images/1-7.gif","images/1-8.gif","images/1-9.gif","images/1-10.gif","images/1-11.gif","images/1-12.gif","images/1-13.gif","images/rear.gif"};
//ImageIcon [] imas ={new ImageIcon("1-1.gif"),};

//构造函数
public Spider(String name,int x,int y,Table table){

super(new ImageIcon(name));
//this.x=x;
//this.y=y;
this.table=table;
this.setSize(WEIGHT, HEIGHT);
this.setLocation(x, y);
this.addMouseMotionListener(new MouseLis());
this.setVisible(true);
}
// ==================================移动
public void moveTo (int x,int y) {
this.x=x;
this.y=y;
this.setLocation(x, y);

}


//=================================初始化
public static void initC(){

ArrayList<Spider> list = new ArrayList<Spider>();
int count=0;
for(int i=0; i<8;i++){
for(int j=0;j<13;j++,count++){
Spider s=new Spider(imaName[j],0,0,table);
s.setVisible(false);
spiders[count]= s;
//list.add(spiders[count]);
table.con.add(spiders[count]);
}
}
//打乱顺序====================================
Random ran = new Random();
for(int i=0;i<100;i++){
int a=ran.nextInt(104);
int b=ran.nextInt(104);
Spider s=spiders[a];
spiders[a]=spiders[b];
spiders[b]=s;
}

//发牌===================================
int x=50;
int y=50;
for(int i=0;i<24;i++){
//Spider s= list.get(i);
Spider s= spiders[i];
s.moveTo(x,y);
table.con.setComponentZOrder(s, 0);
s.setVisible(true);
y+=30;
if((i+1)%6==0) {
x+=110;
y=50;
}
}

for(int i=24;i<54;i++){
//Spider s= list.get(i);
Spider s= spiders[i];
s.moveTo(x,y);
table.con.setComponentZOrder(s, 0);
s.setVisible(true);
y+=30;
if((i+2)%5==0) {
x+=110;
y=50;
}
}

}
//该内部类为处理鼠标拖拽事件===================================================================
class MouseLis extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) {
int x= e.getX();
int y= e.getY();
JButton b =(JButton) e.getSource();
//int x= bu.getX();
//int y= bu.getY();
Spider.this.moveTo(x,y);
//Spider.this.setComponentZOrder(Spider.this, 0);
} // public void mouseMoved(MouseEvent e) {
// int x= e.getX();
// int y= e.getY();
// Spider.this.setLocation(x, y);
//} }
}跪求答案!
游戏

解决方案 »

  1.   

    ......把牌当图片移动
    public class MovePicture extends JFrame implements MouseListener,
    MouseMotionListener {
    JLabel image = null;
    Point mouseInitPoint = null;
    Point labelInitLocation=null;
    Point mouseP=null;
    MovePicture() {
    this.setBounds(200, 100, 400, 400);
    this.setLayout(null);
    // image=new JLabel(new ImageIcon("9.jpg"));
    Toolkit tk = Toolkit.getDefaultToolkit();
    image = new JLabel(new ImageIcon(tk.createImage("9.jpg")));
    image.setSize(50, 80);//不能缩小图片
    image.setLocation(50, 50);//相对Frame

    image.addMouseListener(this);
    image.addMouseMotionListener(this);
    this.add(image);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } public static void main(String[] args) {
    new MovePicture(); } @Override
    public void mousePressed(MouseEvent e) {
    //记录下图片的初始位置
    labelInitLocation=image.getLocation();
    //记录下鼠标的初始位置
    mouseInitPoint=e.getPoint();
    }
    @Override
    public void mouseDragged(MouseEvent e) {

    // 鼠标按下并移动的时候,让图片跟着一起移动
    // 记录鼠标当前的位置是哪里
    mouseP = e.getPoint();
    // 计算平移了多远
    int x = (int) (mouseP.getX() -mouseInitPoint.getX());
    int y = (int) (mouseP.getY() -mouseInitPoint.getY());
    //让图片移动到新的位置上
    image.setLocation((int)(labelInitLocation.getX()+x),(int)(labelInitLocation.getY()+y));
    //让图片的起点坐标重新设置
    labelInitLocation.x=(int)(labelInitLocation.getX()+x);
    labelInitLocation.y=(int)(labelInitLocation.getY()+y);
    System.out.println("x="+x+"  y="+y);
    } @Override
    public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub } @Override
    public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub } @Override
    public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub } @Override
    public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub } @Override
    public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub }}