Java 如何将拖放添加到包含图像的JLabel?

Java 如何将拖放添加到包含图像的JLabel?,java,user-interface,Java,User Interface,下面是我向JLabel添加mouseMotionListener的代码。我希望玩家拖动其中一个图标并将其移动到其他任何位置。然而,没有任何图像移动一点,也没有发生任何事情(也没有错误) 我还是JavaGUI的新手。请帮忙 p1label.setIcon(p1icon); p2label.setIcon(p2icon); p3label.setIcon(p3icon); p4label.setIcon(p4icon); p1label.setTransfe

下面是我向JLabel添加mouseMotionListener的代码。我希望玩家拖动其中一个图标并将其移动到其他任何位置。然而,没有任何图像移动一点,也没有发生任何事情(也没有错误)

我还是JavaGUI的新手。请帮忙

    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);
我将拖动的方法更改为setLocation,而不是使用TransferHandler。它工作得很好!希望这个例子能对你们中的一些人有所帮助

    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);