繁体   English   中英

无法将图标的图像从JLabel传输到另一个

[英]Can not transfer an image of an icon from a JLabel to another

我想将图像从jlabel上的图标拖放到第二jlabel上的另一个图标上。 问题是拖放的Transferhandler方法的某些实现似乎没有被调用,而且我无法从第一个jlabel的图标中检索图像。 希望您能在我的代码中找到问题。

class dndHandler extends TransferHandler implements Transferable {

    private final DataFlavor flavors[] = { DataFlavor.imageFlavor };

    private Image image;

        @Override
        public int getSourceActions(JComponent c) {
            System.out.println("test"); // Does not work
            return TransferHandler.COPY;
        }

        @Override
        public Transferable createTransferable(JComponent comp) {
            System.out.println("test"); // Does not work
             image = null;
             image = (Image)((ImageIcon) (((JLabel)comp).getIcon())).getImage(); //We transfer image //image stays null
             return this;
        }

        @Override
        public boolean canImport(JComponent comp, DataFlavor flavor[]) {
            if (!(comp instanceof JLabel)) {
                return false;
            }
            System.out.println("test"); //It works here
            return true;
        }

        @Override
        public boolean importData(JComponent comp, Transferable t) {
            if (comp instanceof JLabel) {

                    System.out.println(((JLabel)comp).getName()); //It works but the image is null
                    ((JLabel)comp).setIcon(new ImageIcon(image)); //The label stays empty
                    return true;
            } 
            return false;
        }

        @Override
        public Object getTransferData(DataFlavor flavor) {
            if (isDataFlavorSupported(flavor)) {
                return image;
            }
            return null;
        }

        @Override
        public DataFlavor[] getTransferDataFlavors() {
            return flavors;
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return flavors[0].equals(flavor);
        }

    }

    MouseListener specialListener = new SpecialDragMouseAdapter();

    class SpecialDragMouseAdapter extends MouseAdapter {
        @Override
        public void mousePressed(MouseEvent evt) {
            JComponent comp = (JComponent)evt.getSource();
            TransferHandler th = comp.getTransferHandler();

            // Start the drag operation
            th.exportAsDrag(comp, evt, TransferHandler.COPY);
        }

    }

public class PrincipalFrame extends javax.swing.JFrame {

    TransferHandler dropHandler = new dndHandler();

    public PrincipalFrame()
    {
        JLabel label1 = new JLabel();
        JLabel label2 = new JLabel();

        label1.setName("label "+i+"-"+j);
        label1.setSize(50,50);
        label1.setBorder(BorderFactory.createLineBorder(java.awt.Color.black));
        label1.setIcon(new ImageIcon("put a file path on your computer"))
        label1.addMouseListener(specialListener);
        label1.setTransferHandler(dropHandler);

        label2.setName("label "+i+"-"+j);
        label2.setSize(50,50);
        label2.setBorder(BorderFactory.createLineBorder(java.awt.Color.black));
        label2.addMouseListener(specialListener);
        label2.setTransferHandler(dropHandler);
  }
}

public static void main(String args[]) {

    /*
     * Create and display the form
     */
    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            javax.swing.JFrame principalFrame = new PrincipalFrame();
            //Size of the window
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            principalFrame.setSize(Toolkit.getDefaultToolkit().getScreenSize().width,
                                   Toolkit.getDefaultToolkit().getScreenSize().height-40);
            //Center the window
            principalFrame.setLocation(0,0);
            principalFrame.setVisible(true); 
        }
    });
}

对不起,我只是自愿者,

一个错误

在此处输入图片说明

第二次错误

在此处输入图片说明

第三错误

在此处输入图片说明

然后请阅读有关拖放的教程, 此处为示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM