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

使用TransferHandler拖动JLabel(拖放)

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

使用TransferHandler拖动JLabel(拖放)

另一个例子:

编辑:修复光标闪烁

import java.awt.*;import java.awt.datatransfer.*;import java.awt.dnd.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.activation.*;import javax.swing.*;import javax.swing.text.*;public class DragTest3 {  public JComponent makeUI() {    DragPanel p1 = new DragPanel();    p1.setBorder(BorderFactory.createLineBorder(Color.BLACK));    p1.add(new JLabel(UIManager.getIcon("OptionPane.warningIcon")));    p1.add(new JLabel(UIManager.getIcon("OptionPane.errorIcon")));    p1.add(new JLabel("Label1"));    p1.add(new JLabel("Label2"));    MouseListener handler = new Handler();    p1.addMouseListener(handler);    LabelTransferHandler th = new LabelTransferHandler();    p1.setTransferHandler(th);    JPanel p = new JPanel(new GridLayout(1,2));    p.add(p1);    DragPanel p2 = new DragPanel();    p2.setBorder(BorderFactory.createLineBorder(Color.BLACK));    p2.addMouseListener(handler);    p2.setTransferHandler(th);    p.add(p2);    JPanel panel = new JPanel(new GridLayout(2,1));    panel.add(p);    panel.add(new JScrollPane(new Jtextarea()));    return panel;  }  public static void main(String[] args) {    EventQueue.invokeLater(new Runnable() {      @Override public void run() {        createAndShowGUI();      }    });  }  public static void createAndShowGUI() {    Jframe f = new Jframe();    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    f.getContentPane().add(new DragTest3().makeUI());    f.setSize(320, 240);    f.setLocationRelativeTo(null);    f.setVisible(true);  }}class DragPanel extends JPanel {  public DragPanel() {    super();  }  public JLabel draggingLabel;}class Handler extends MouseAdapter {  @Override public void mousePressed(MouseEvent e) {    DragPanel p = (DragPanel)e.getSource();    Component c = SwingUtilities.getDeepestComponentAt(p, e.getX(), e.getY());    if(c!=null && c instanceof JLabel) {      p.draggingLabel = (JLabel)c;      p.getTransferHandler().exportAsDrag(p, e, TransferHandler.MOVE);    }  }}class LabelTransferHandler extends TransferHandler {  private final DataFlavor localObjectFlavor;  private final JLabel label = new JLabel() {    @Override public boolean contains(int x, int y) {      return false;    }  };  private final JWindow window = new JWindow();  public LabelTransferHandler() {    System.out.println("LabelTransferHandler");    localObjectFlavor = new ActivationDataFlavor(      DragPanel.class, DataFlavor.javaJVMLocalObjectMimeType, "JLabel");    window.add(label);    window.setAlwaysonTop(true);    window.setBackground(new Color(0,true));    DragSource.getDefaultDragSource().addDragSourceMotionListener(    new DragSourceMotionListener() {      @Override public void dragMouseMoved(DragSourceDragEvent dsde) {        Point pt = dsde.getLocation();        pt.translate(5, 5); // offset        window.setLocation(pt);      }    });  }  @Override protected Transferable createTransferable(JComponent c) {    System.out.println("createTransferable");    DragPanel p = (DragPanel)c;    JLabel l = p.draggingLabel;    String text = l.getText();    //TEST    //if(text==null) {    //    text = l.getIcon().toString();    //}    //return new StringSelection(text+"n");    final DataHandler dh = new DataHandler(c, localObjectFlavor.getMimeType());    if(text==null) return dh;    final StringSelection ss = new StringSelection(text+"n");    return new Transferable() {      @Override public DataFlavor[] getTransferDataFlavors() {        ArrayList<DataFlavor> list = new ArrayList<>();        for(DataFlavor f:ss.getTransferDataFlavors()) {          list.add(f);        }        for(DataFlavor f:dh.getTransferDataFlavors()) {          list.add(f);        }        return list.toArray(dh.getTransferDataFlavors());      }      public boolean isDataFlavorSupported(DataFlavor flavor) {        for (DataFlavor f: getTransferDataFlavors()) {          if (flavor.equals(f)) { return true;          }        }        return false;      }      public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {        if(flavor.equals(localObjectFlavor)) {          return dh.getTransferData(flavor);        } else {          return ss.getTransferData(flavor);        }      }    };  }  @Override public boolean canimport(TransferSupport support) {    if(!support.isDrop()) {      return false;    }    return true;  }  @Override public int getSourceActions(JComponent c) {    System.out.println("getSourceActions");    DragPanel p = (DragPanel)c;    label.setIcon(p.draggingLabel.getIcon());    label.setText(p.draggingLabel.getText());    window.pack();    Point pt = p.draggingLabel.getLocation();    SwingUtilities.convertPointToScreen(pt, p);    window.setLocation(pt);    window.setVisible(true);    return MOVE;  }  @Override public boolean importData(TransferSupport support) {    System.out.println("importData");    if(!canimport(support)) return false;    DragPanel target = (DragPanel)support.getComponent();    try {      DragPanel src = (DragPanel)support.getTransferable().getTransferData(localObjectFlavor);      JLabel l = new JLabel();      l.setIcon(src.draggingLabel.getIcon());      l.setText(src.draggingLabel.getText());      target.add(l);      target.revalidate();      return true;    } catch(UnsupportedFlavorException ufe) {      ufe.printStackTrace();    } catch(java.io.IOException ioe) {      ioe.printStackTrace();    }    return false;  }  @Override protected void exportDone(JComponent c, Transferable data, int action) {    System.out.println("exportDone");    DragPanel src = (DragPanel)c;    if(action == TransferHandler.MOVE) {      src.remove(src.draggingLabel);      src.revalidate();      src.repaint();    }    src.draggingLabel = null;    window.setVisible(false);  }}


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

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

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