【发布时间】:2011-10-07 08:50:58
【问题描述】:
我想在我的系统上实现 DnD,方法是将一个节点从 JTree 拖放到 JLabel 上。
JLabel 是一个具有某些机器属性的图标,通过将信息从 JTree 节点拖到 JLabel 上,我希望它能够向在该机器上侦听的客户端发送消息。
非常感谢任何帮助!
标签方法示例:
private void makeLabel(String html, final String version) {
// Create a button to link to the DR environment
//JButton button = new JButton(html);
JLabel machineLabel = new JLabel();
machineLabel.setTransferHandler(new TransferHandler("text"));
MouseListener listener = new DragMouseAdapter();
machineLabel.addMouseListener(listener);
machineLabel.setIcon(onlineIcon);
machineLabel.setToolTipText("IP: " + html);
//Add the button to the panel and make sure it appears
machineLabel.setSize(25, 10);
vecIcons.addElement(machineLabel);
buttonPanel.add(machineLabel);
buttonPanel.setVisible(true);
buttonPanel.validate();
dynaScrollPane.validate();
buttonPanel.repaint();
dynaScrollPane.repaint();
}
DragMouseAdapter 方法:
private class DragMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
JComponent c = (JComponent) e.getSource();
TransferHandler handler = c.getTransferHandler();
handler.exportAsDrag(c, e, TransferHandler.LINK);
}
}
然后为了使我的树可拖动,我只需要:
exampleTree.setDragEnabled(true);
【问题讨论】:
-
这可能对您有帮助:Drag and Drop and Data Transfer 和 this example。
-
我相信这是常规的Java DnD support。
-
我确实尝试了按照 Java 教程提供的代码,但它并不能真正与 jLabels 一起使用,而是将控制字符串放在标签旁边,而不是放在标签上。
-
这听起来更像是 Swing 渲染的问题,而不是 DnD 的问题。你能发一个scce吗?
-
我刚刚把所有相关的方法和代码都贴在原帖里了。
标签: java swing drag-and-drop applet jtree