jtree可拖拽节点到textare:
package com.sysc.xmleditor.core; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; 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.DragSourceContext; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; public class JTreeTest { public static void main(String[] args) { //整体窗口的使用 final JFrame jFrame=new JFrame("我的第一个窗体"); jFrame.setSize(new Dimension(800, 500));//设置窗体的大小 jFrame.setBackground(Color.BLACK); jFrame.setLocation(new Point(300, 300));//设置窗体显示的位置 jFrame.setVisible(true); jFrame.setLayout(new FlowLayout()); jFrame.addWindowListener(new WindowAdapter() {//加入关闭窗体事件 @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub System.out.println("系统正在关闭"); System.exit(0); } }); DefaultMutableTreeNode root = new DefaultMutableTreeNode( " root ");//设置一个tree的根节点color DefaultMutableTreeNode color = new DefaultMutableTreeNode( " Color ");//设置一个tree的根节点color DefaultMutableTreeNode gray = new DefaultMutableTreeNode ( " Gray " );//设置另一个节点gray color.add (gray);//把Gary加入到color //设置各个节点子类、父类关系 DefaultMutableTreeNode red=new DefaultMutableTreeNode ( " Red " ); color.add (red ); DefaultMutableTreeNode Lightgray=new DefaultMutableTreeNode ( " Lightgray " ); gray.add (Lightgray ); DefaultMutableTreeNode Darkgray=new DefaultMutableTreeNode ( " Darkgray " ); gray.add (Darkgray ); DefaultMutableTreeNode Green=new DefaultMutableTreeNode ( " Green " ); color.add ( Green); root.add(color); JTree example5 = new JTree (root);//初始化jtree,把根节点color传入 jFrame.add(example5);//加入jframe面板 JTextArea textArea=new JTextArea(20,20); textArea.setBackground(Color.YELLOW); jFrame.add(textArea); DragSource dragSource=DragSource.getDefaultDragSource();//创建拖拽环境 //设置拖拽组件,拖拽方式,拖拽数据准备传输 dragSource.createDefaultDragGestureRecognizer(example5, DnDConstants.ACTION_COPY_OR_MOVE , new MyDemoDragGestureListener()); new DropTarget(textArea, new MyDemoDropTargetListener());//设置拖拽目的地的组件,上面所执行的操作 } } /** * 从被拖拽组件当中得到退拽数据 * @author Administrator * */ class MyDemoDragGestureListener implements DragGestureListener{ @Override public void dragGestureRecognized(DragGestureEvent dge) { // TODO Auto-generated method stub JTree tree = (JTree) dge.getComponent(); TreePath path = tree.getSelectionPath(); if (path != null) { DefaultMutableTreeNode selection = (DefaultMutableTreeNode) path .getLastPathComponent(); //开始拖拽,保存拖拽数据,以及拖拽时候的鼠标样式 dge.startDrag(DragSource.DefaultCopyDrop, new MyDemoTransferable(selection), new MyDemoDragSourceListener()); } } } /** * 暂时存放拖放数据的地方 * @author Administrator * */ class MyDemoTransferable implements Transferable { private DefaultMutableTreeNode treeNode; public MyDemoTransferable(DefaultMutableTreeNode treeNode){ this.treeNode=treeNode; } @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { // TODO Auto-generated method stub return treeNode; } static DataFlavor flavors[] = { DataFlavor.stringFlavor }; @Override public DataFlavor[] getTransferDataFlavors() { // TODO Auto-generated method stub return flavors; } //是否支持指定数据flavors @Override public boolean isDataFlavorSupported(DataFlavor arg0) { // TODO Auto-generated method stub return true; } } /** * 设置拖拽鼠标样式的地方 * @author Administrator * */ class MyDemoDragSourceListener implements DragSourceListener{ @Override public void dragDropEnd(DragSourceDropEvent arg0) { // TODO Auto-generated method stub System.out.println("拖拽已完成"+arg0.getDropAction()); } @Override public void dragEnter(DragSourceDragEvent arg0) { // TODO Auto-generated method stub System.out.println("进入拖拽位置"+arg0.getDropAction()); DragSourceContext context = arg0.getDragSourceContext(); context.setCursor(DragSource.DefaultMoveDrop); } @Override public void dragExit(DragSourceEvent arg0) { // TODO Auto-generated method stub System.out.println("离开拖拽位置"); DragSourceContext context = arg0.getDragSourceContext(); context.setCursor(DragSource.DefaultCopyDrop); } @Override public void dragOver(DragSourceDragEvent arg0) { // TODO Auto-generated method stub } @Override public void dropActionChanged(DragSourceDragEvent arg0) { // TODO Auto-generated method stub } } /** * 拖拽目的地所执行的操作 * @author Administrator * */ class MyDemoDropTargetListener implements DropTargetListener{ @Override public void dragEnter(DropTargetDragEvent dtde) { // TODO Auto-generated method stub System.out.println("dsdsdsd"); dtde.getDropTargetContext().getComponent().setBackground(Color.GRAY); } @Override public void dragExit(DropTargetEvent dte) { // TODO Auto-generated method stub dte.getDropTargetContext().getComponent().setBackground(Color.YELLOW); } @Override public void dragOver(DropTargetDragEvent dtde) { // TODO Auto-generated method stub } @Override public void drop(DropTargetDropEvent dtde) { // TODO Auto-generated method stub Transferable tr = dtde.getTransferable();// 使用该函数从Transferable对象中获取有用的数据 String str = ""; try { if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) { str = tr.getTransferData(DataFlavor.stringFlavor).toString(); } } catch (IOException ex) { } catch (UnsupportedFlavorException ex) { } System.out.println(str); DropTarget target = (DropTarget) dtde.getSource(); JTextArea filed = (JTextArea) target.getComponent(); if (str != null && str != "") { filed.setText(filed.getText() + str); } dtde.getDropTargetContext().getComponent().setBackground(Color.YELLOW); System.out.println("*********end*************"); } @Override public void dropActionChanged(DropTargetDragEvent dtde) { // TODO Auto-generated method stub } }
jtree可退拽节点到自身节点下面:
package com.sysc.xmleditor.core.utils; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; 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.DragSourceContext; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; public class JTreeTest2 { public static void main(String[] args) { //整体窗口的使用 final JFrame jFrame=new JFrame("我的第一个窗体"); jFrame.setSize(new Dimension(800, 500));//设置窗体的大小 jFrame.setBackground(Color.BLACK); jFrame.setLocation(new Point(300, 300));//设置窗体显示的位置 jFrame.setVisible(true); jFrame.setLayout(new FlowLayout()); jFrame.addWindowListener(new WindowAdapter() {//加入关闭窗体事件 @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub System.out.println("系统正在关闭"); System.exit(0); } }); DefaultMutableTreeNode root = new DefaultMutableTreeNode( " root ");//设置一个tree的根节点color DefaultMutableTreeNode color = new DefaultMutableTreeNode( " Color ");//设置一个tree的根节点color DefaultMutableTreeNode gray = new DefaultMutableTreeNode ( " Gray " );//设置另一个节点gray color.add (gray);//把Gary加入到color //设置各个节点子类、父类关系 DefaultMutableTreeNode red=new DefaultMutableTreeNode ( " Red " ); color.add (red ); DefaultMutableTreeNode Lightgray=new DefaultMutableTreeNode ( " Lightgray " ); gray.add (Lightgray ); DefaultMutableTreeNode Darkgray=new DefaultMutableTreeNode ( " Darkgray " ); gray.add (Darkgray ); DefaultMutableTreeNode Green=new DefaultMutableTreeNode ( " Green " ); color.add ( Green); root.add(color); JTree example5 = new JTree (root);//初始化jtree,把根节点color传入 jFrame.add(example5);//加入jframe面板 DragSource dragSource=DragSource.getDefaultDragSource();//创建拖拽环境 //设置拖拽组件,拖拽方式,拖拽数据准备传输 dragSource.createDefaultDragGestureRecognizer(example5, DnDConstants.ACTION_COPY_OR_MOVE , new MyDemoDragGestureListener()); new DropTarget(example5, new MyDemoDropTargetListener());//设置拖拽目的地的组件,上面所执行的操作 } } /** * 从被拖拽组件当中得到退拽数据 * @author Administrator * */ class MyDemoDragGestureListener implements DragGestureListener{ @Override public void dragGestureRecognized(DragGestureEvent dge) { // TODO Auto-generated method stub JTree tree = (JTree) dge.getComponent(); TreePath path = tree.getSelectionPath(); if (path != null) { DefaultMutableTreeNode selectTreeNode = (DefaultMutableTreeNode) path .getLastPathComponent(); //开始拖拽,保存拖拽数据,以及拖拽时候的鼠标样式 dge.startDrag(DragSource.DefaultCopyDrop, new MyDemoTransferable(selectTreeNode), new MyDemoDragSourceListener()); } } } /** * 暂时存放拖放数据的地方 * @author Administrator * */ class MyDemoTransferable implements Transferable { private DefaultMutableTreeNode treeNode; public MyDemoTransferable(DefaultMutableTreeNode treeNode){ this.treeNode=treeNode; } @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { // TODO Auto-generated method stub return treeNode; } static DataFlavor flavors[] = { DataFlavor.stringFlavor }; @Override public DataFlavor[] getTransferDataFlavors() { // TODO Auto-generated method stub return flavors; } //是否支持指定数据flavors @Override public boolean isDataFlavorSupported(DataFlavor arg0) { // TODO Auto-generated method stub return true; } } /** * 设置拖拽鼠标样式的地方 * @author Administrator * */ class MyDemoDragSourceListener implements DragSourceListener{ @Override public void dragDropEnd(DragSourceDropEvent arg0) { // TODO Auto-generated method stub } @Override//进入拖拽 public void dragEnter(DragSourceDragEvent arg0) { // TODO Auto-generated method stub DragSourceContext context = arg0.getDragSourceContext(); System.out.println(context.getComponent()); context.setCursor(DragSource.DefaultMoveDrop); } @Override//离开拖拽 public void dragExit(DragSourceEvent arg0) { // TODO Auto-generated method stub DragSourceContext context = arg0.getDragSourceContext(); context.setCursor(DragSource.DefaultCopyNoDrop); } @Override public void dragOver(DragSourceDragEvent arg0) { // TODO Auto-generated method stub } @Override public void dropActionChanged(DragSourceDragEvent arg0) { // TODO Auto-generated method stub } } /** * 拖拽目的地所执行的操作 * @author Administrator * */ class MyDemoDropTargetListener implements DropTargetListener{ @Override public void dragEnter(DropTargetDragEvent dtde) { // TODO Auto-generated method stub } @Override public void dragExit(DropTargetEvent dte) { // TODO Auto-generated method stub } @Override//拖动过程中调用 public void dragOver(DropTargetDragEvent dtde) { // TODO Auto-generated method stub DropTarget target = (DropTarget) dtde.getSource(); JTree targetTree = (JTree) target.getComponent(); TreePath treePath=targetTree.getPathForLocation(dtde.getLocation().x, dtde.getLocation().y); if(treePath!=null){ targetTree.setSelectionPath(treePath); } } @Override//拖拽结束时候调用 public void drop(DropTargetDropEvent dtde) { // TODO Auto-generated method stub Transferable tr = dtde.getTransferable();// 使用该函数从Transferable对象中获取有用的数据 DefaultMutableTreeNode yuanNode=null;//拖过来的节点 try { if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) { yuanNode = (DefaultMutableTreeNode)tr.getTransferData(DataFlavor.stringFlavor);//从Transferable这里面得到 } } catch (IOException ex) { } catch (UnsupportedFlavorException ex) { } System.out.println("**********"+yuanNode.getUserObject()); String str = ""; try { if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) { str = tr.getTransferData(DataFlavor.stringFlavor).toString(); } } catch (IOException ex) { } catch (UnsupportedFlavorException ex) { } System.out.println(str); DropTarget target = (DropTarget) dtde.getSource(); JTree targetTree = (JTree) target.getComponent(); TreePath treePath=targetTree.getPathForLocation(dtde.getLocation().x, dtde.getLocation().y); TreePath t= new TreePath(yuanNode.getPath()); targetTree.setSelectionPath(t); targetTree.removeSelectionPath(t); DefaultMutableTreeNode mudidi=(DefaultMutableTreeNode)treePath.getLastPathComponent(); mudidi.add(yuanNode); targetTree.updateUI(); System.out.println("最后落脚的节点:"+treePath); System.out.println("*********end*************"); } @Override public void dropActionChanged(DropTargetDragEvent dtde) { // TODO Auto-generated method stub } }
DragSource dragSource=DragSource.getDefaultDragSource();//创建拖拽环境
//设置拖拽组件,拖拽方式,拖拽数据准备传输
dragSource.createDefaultDragGestureRecognizer(example5, DnDConstants.ACTION_COPY_OR_MOVE , new MyDemoDragGestureListener());
其中MyDemoDragGestureListener 里面有一个方法很重要:
//开始拖拽,保存拖拽数据,以及拖拽时候的鼠标样式
dge.startDrag(DragSource.DefaultCopyDrop, new MyDemoTransferable(selectTreeNode), new MyDemoDragSourceListener());
其中MyDemoTransferable 是传输被拖拽的数据。
MyDemoDragSourceListener是拖拽的时候鼠标的样式
//MyDemoDropTargetListener是目的地控件所做的动作
new DropTarget(example5, new MyDemoDropTargetListener());//设置拖拽目的地的组件,上面所执行的操作
要实现jtree的拖拽要实现4个接口即可:
DragGestureListener:准备要拖住数据其中startDrag方法很重要
Transferable://被拖住对象存放数据的地方接口
DragSourceListener:鼠标拖拽的样式接口,鼠标在目的地“进入,经过,离开”的动作监控
DropTargetListener:拖拽目的地所执行的操作,被拖拽对象在目的地“进入、经过、离开”的动作监控
这样就可以实现jtree的拖拽了,其实java的拖拽都是这样的,只要实现这几个接口任何空间都可以进行拖拽的。
相关推荐
这个例子展示了如何实现一个可拖动节点的`JTree`,这在用户界面设计中是一个常见且实用的功能,特别是在需要展示层次结构信息时。`JTree`允许用户通过拖放操作来重新排列节点,提高交互性和用户体验。 拖放(Drag ...
总之,JTree和JTable是Java GUI编程中不可或缺的工具,熟练掌握它们的使用能够极大地提升开发效率,提供用户友好的数据展示界面。通过实践和研究提供的实例代码,开发者可以深入理解这两个组件的工作原理,从而更好...
本篇文章将深入探讨如何在`JTree`中实现拖拽(Drag and Drop,简称DnD)功能,使用户能够通过拖动节点来重新组织树形结构。 首先,为了启用`JTree`的拖放功能,我们需要在`JTree`实例上注册一个`DragSource`和`...
这个例子可能包含一个`JTree`,其中每个节点代表一个文件或目录,展开节点可以查看其子目录或文件。 接着,我们讨论`JTable`。`JTable`是一个用于展示和编辑表格数据的组件。它使用`TableModel`接口来获取和设置...
Jtree的使用例子 这是类似qq的节点例子 帮助我们是简单地编码
### Java组件之JTree使用详解 #### 一、引言 `JTree`是Java Swing中的一个重要组件,用于展示层次化的数据结构。它提供了一种直观的方式来表示具有层级关系的数据,例如文件系统的目录结构或者组织架构等。本文将...
java代码-使用java解决JTree文件浏览的源代码
在Java编程中,`JTree`是Swing库中的一个组件,用于展示树形数据结构。这个组件在GUI(图形用户界面)应用中非常常见,因为它可以清晰地展示层次关系的数据,比如文件系统目录结构。在Java中动态实现二叉树,即在...
Java Swing中的JTree组件是用来展示层次结构数据的可视化控件,它通常用于文件系统或组织结构的表示。JTree的核心是TreeNode接口,每个节点都对应一个TreeNode对象。TreeNode定义了一系列方法,如`getChildCount()`...
java代码-使用java解决JTree JSON的源代码 ——学习参考资料:仅用于个人学习使用!
在例子中,使用了`FlowLayout`布局管理器将`JTree`添加到窗口中。 3. **节点的选中和信息获取**: JTree允许用户选择特定的节点。当用户选择节点时,可以通过监听`TreeSelectionListener`事件来获取选中的节点信息...
java代码-使用java解决JTree访问XML的源代码 ——学习参考资料:仅用于个人学习使用!
在Java Swing库中,JTree是一个非常有用的组件,它用于展示层次结构的数据,例如文件系统或组织结构。在你的项目中,你似乎正在探索如何在JTree的不同节点上显示特定的图片,这可以增强用户的视觉体验,使得界面更加...
在Java编程中,`JTree`是...总之,`JTree`是Java Swing中不可或缺的一部分,它为展示和操作层次化数据提供了强大而灵活的工具。通过深入学习和实践,开发者可以构建出功能丰富的图形用户界面,满足各种业务场景的需求。
java代码-使用java解决XML2JTree的源代码 ——学习参考资料:仅用于个人学习使用!
在这个"90个java-swing基础例子.zip"压缩包中,你将找到90个不同的示例,涵盖了Swing的基础用法,这对于学习和理解Swing的各种功能非常有帮助。 1. **Swing组件**:Swing 提供了许多组件,如按钮(JButton),文本框...
总之,JTree是Java GUI编程中不可或缺的一部分,它提供了一种直观的方式来表示层次结构数据,使得用户能够方便地浏览和操作这些数据。通过理解和掌握JTree的使用,Java初学者可以提升自己的UI设计能力和数据展示技巧...
Java中的JTree组件是Swing库提供的一种用于展示树形数据结构的图形用户界面(GUI)元素。在Java中,JTree通常用于显示文件系统、应用程序的层次结构或任何具有层级关系的数据。JTree的高级编程涉及到多个方面,包括...
Java JTree是Java Swing库中的一个组件,用于创建和展示树形数据结构。在Java图形用户界面(GUI)开发中,JTree常被用来显示文件系统、组织结构或任何层次结构的数据。本示例程序“javaJTree编程(源代码)”提供了一...
总之,`JTable`和`JTree`是Java Swing中不可或缺的组件,用于展示和操作表格及树形数据。通过理解和实践,开发者能够构建出交互性强、功能丰富的桌面应用程序。在“JTable_JTree.rar”中,你将找到相关的示例代码,...