2016-11-21 80 views
-1
p1label.setIcon(p1icon); 
    p2label.setIcon(p2icon); 
    p3label.setIcon(p3icon); 
    p4label.setIcon(p4icon); 

    p1label.setTransferHandler(new TransferHandler("p1")); 
    p2label.setTransferHandler(new TransferHandler("p2")); 
    p3label.setTransferHandler(new TransferHandler("p3")); 
    p4label.setTransferHandler(new TransferHandler("p4")); 

    MouseMotionListener mouseAction = new MouseMotionAdapter() { 

     @Override 
     public void mouseDragged(MouseEvent e) { 
      JComponent label = (JComponent) e.getSource(); 
      TransferHandler th = label.getTransferHandler(); 
      th.exportAsDrag(label,e,TransferHandler.COPY); 
     } 
    }; 

    p1label.addMouseMotionListener(mouseAction); 
    p2label.addMouseMotionListener(mouseAction); 
    p3label.addMouseMotionListener(mouseAction); 
    p4label.addMouseMotionListener(mouseAction); 

这里是我的代码,添加一个mouseMotionListener到JLabel。我希望玩家拖动其中一个图标并将其移动到其他任何地方。然而,没有一个图像移动了一下,没有发生任何事情(也没有错误信息)。如何添加拖放到包含图像的JLabel?

我还是Java GUI的新手。请帮忙。

回答

0
p1label.setIcon(p1icon); 
    p2label.setIcon(p2icon); 
    p3label.setIcon(p3icon); 
    p4label.setIcon(p4icon); 

    MouseMotionListener mouseAction = new MouseMotionAdapter() { 

     @Override 
     public void mouseDragged(MouseEvent e) { 
      JComponent label = (JComponent) e.getSource(); 
      label.setLocation(label.getLocation().x + e.getX(), label.getLocation().y + e.getY()); 
     } 
    }; 

    p1label.addMouseMotionListener(mouseAction); 
    p2label.addMouseMotionListener(mouseAction); 
    p3label.addMouseMotionListener(mouseAction); 
    p4label.addMouseMotionListener(mouseAction); 

我将拖动的方法更改为setLocation而不是使用TransferHandler。它很棒!希望这个例子能帮助你们中的一些人。