栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将图像从一个面板拖到另一个面板

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将图像从一个面板拖到另一个面板

使用纯Java的快速示例DragGestureListener,DropTargetAdapter并
TransferHandler为一个面板上的图像对另一面板的DnD支持:

选择绿色形状并将其拖动到上方的空白面板后:

import java.awt.BorderLayout;import java.awt.Component;import java.awt.Dimension;import java.awt.Point;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.dnd.DnDConstants;import java.awt.dnd.DragGestureEvent;import java.awt.dnd.DragGestureListener;import java.awt.dnd.DragSource;import java.awt.dnd.DropTarget;import java.awt.dnd.DropTargetAdapter;import java.awt.dnd.DropTargetDropEvent;import java.io.IOException;import java.net.URL;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.Jframe;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.SwingUtilities;import javax.swing.TransferHandler;import javax.swing.TransferHandler.TransferSupport;import javax.swing.border.TitledBorder;public class Test {    public static void main(String[] args) {        createAndShowJframe();    }    public static void createAndShowJframe() {        SwingUtilities.invokeLater(new Runnable() { @Override public void run() {     Jframe frame = createJframe();     frame.setVisible(true); }        });    }    private static Jframe createJframe() {        Jframe frame = new Jframe();        frame.setDefaultCloseOperation(Jframe.DISPOSE_ON_CLOSE);        frame.setTitle("Test");        JPanel panel = createEmptyJPanel();        new MyDropTargetListener(panel);//this must be done or we wont be able to drop any image onto the empty panel        frame.add(panel, BorderLayout.CENTER);        try { frame.add(createJLabelPanel(), BorderLayout.SOUTH);        } catch (Exception ex) { ex.printStackTrace();        }        frame.pack();        return frame;    }    private static JPanel createEmptyJPanel() {        final JPanel p = new JPanel() { @Override public Dimension getPreferredSize() {     return new Dimension(300, 300); }        };        p.setBorder(new TitledBorder("Drag Image onto this panel"));        TransferHandler dnd = new TransferHandler() { @Override public boolean canimport(TransferSupport support) {     if (!support.isDrop()) {         return false;     }     //only Strings     if (!support.isDataFlavorSupported(DataFlavor.imageFlavor)) {         return false;     }     return true; } @Override public boolean importData(TransferSupport support) {     if (!canimport(support)) {         return false;     }     Transferable tansferable = support.getTransferable();     Icon ico;     try {         ico = (Icon) tansferable.getTransferData(DataFlavor.imageFlavor);     } catch (Exception e) {         e.printStackTrace();         return false;     }     p.add(new JLabel(ico));     return true; }        };        p.setTransferHandler(dnd);        return p;    }    private static JPanel createJLabelPanel() throws Exception {        JPanel panel = new JPanel();        panel.setBorder(new TitledBorder("Drag Image from here to Panel above"));        JLabel label1 = new JLabel(new ImageIcon(new URL("http://i.stack.imgur.com/gJmeJ.png")));        JLabel label2 = new JLabel(new ImageIcon(new URL("http://i.stack.imgur.com/8BGfi.png")));        JLabel label3 = new JLabel(new ImageIcon(new URL("http://i.stack.imgur.com/1lgtq.png")));        MyDragGestureListener dlistener = new MyDragGestureListener();        DragSource ds1 = new DragSource();        ds1.createDefaultDragGestureRecognizer(label1, DnDConstants.ACTION_COPY, dlistener);        DragSource ds2 = new DragSource();        ds2.createDefaultDragGestureRecognizer(label2, DnDConstants.ACTION_COPY, dlistener);        DragSource ds3 = new DragSource();        ds3.createDefaultDragGestureRecognizer(label3, DnDConstants.ACTION_COPY, dlistener);        panel.add(label1);        panel.add(label2);        panel.add(label3);        return panel;    }}class MyDropTargetListener extends DropTargetAdapter {    private DropTarget dropTarget;    private JPanel p;    public MyDropTargetListener(JPanel panel) {        p = panel;        dropTarget = new DropTarget(panel, DnDConstants.ACTION_COPY, this, true, null);    }    @Override    public void drop(DropTargetDropEvent event) {        try { DropTarget test = (DropTarget) event.getSource(); Component ca = (Component) test.getComponent(); Point dropPoint = ca.getMousePosition(); Transferable tr = event.getTransferable(); if (event.isDataFlavorSupported(DataFlavor.imageFlavor)) {     Icon ico = (Icon) tr.getTransferData(DataFlavor.imageFlavor);     if (ico != null) {         p.add(new JLabel(ico));         p.revalidate();         p.repaint();         event.dropComplete(true);     } } else {     event.rejectDrop(); }        } catch (Exception e) { e.printStackTrace(); event.rejectDrop();        }    }}class MyDragGestureListener implements DragGestureListener {    @Override    public void dragGestureRecognized(DragGestureEvent event) {        JLabel label = (JLabel) event.getComponent();        final Icon ico = label.getIcon();        Transferable transferable = new Transferable() { @Override public DataFlavor[] getTransferDataFlavors() {     return new DataFlavor[]{DataFlavor.imageFlavor}; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) {     if (!isDataFlavorSupported(flavor)) {         return false;     }     return true; } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {     return ico; }        };        event.startDrag(null, transferable);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号