package testpicturejava;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.util.Enumeration;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class JTreeFrame extends JFrame {
public JTreeFrame() {
try {
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
getContentPane().setLayout(null);
setSize(new Dimension(434, 347));
setTitle("JTree Frame Title");
jScrollPane1.setBounds(new Rectangle(9, 9, 429, 317));
this.getContentPane().add(jScrollPane1);
expandTree(jTree1);
jScrollPane1.getViewport().add(jTree1);
}
/** * 完全展开一个JTree * @param tree JTree */
public static void expandTree(JTree tree) {
TreeNode root = (TreeNode) tree.getModel().getRoot();
expandAll(tree, new TreePath(root), true);
}
/** * 完全展开或关闭一个树,用于递规执行 * @param tree JTree * @param parent 父节点 * @param expand 为true则表示展开树,否则为关闭整棵树 */
private static void expandAll(JTree tree, TreePath parent, boolean expand) {
//Traverse children
TreeNode node = (TreeNode) parent.
getLastPathComponent();
if (node.getChildCount() >= 0) {
for (Enumeration e = node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode) e.nextElement();
TreePath path = parent.pathByAddingChild(n);
expandAll(tree, path, expand);
}
} // Expansion or collapse must be done bottom-up
if (expand) {
tree.expandPath(parent);
} else {
tree.collapsePath(parent);
}
}
JScrollPane jScrollPane1 = new JScrollPane();
JTree jTree1 = new JTree();
}
2。用最简便的方法更换JTREE图标 来源自 http://www.35dx.com/html/java/1/java543.html
最近为一个程序写界面,需要更换JTree的默认图标,因为以前从没做过swing,走了不少弯路,现在把方法告诉大家,希望对你的工作能有所帮助.
先来一个常见的图标更换方法,需要显示继承DefaultTreeCellRenderer类,代码引用自http://blog.blogchina.com/174500.html
private class MyRenderer extends DefaultTreeCellRenderer {
ImageIcon htmlIcon;
ImageIcon imageIcon;
public MyRenderer() {
htmlIcon = new ImageIcon("source/html.gif");
imageIcon=new ImageIcon("source/image.gif");
}
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(
tree, value, sel,
expanded, leaf, row,
hasFocus);
if (leaf && isImage(value)) {
setIcon(imageIcon);
//setToolTipText("This book is in the Tutorial series.");
}
else if(leaf){
setIcon(htmlIcon);
}
return this;
}
protected boolean isImage(Object value) {
Sitemarks.SitemarkEntry node =
(Sitemarks.SitemarkEntry)value;
String name=
(String)(node.getName());
if (name.endsWith(".jpg")||name.endsWith(".gif")) {
return true;
}
return false;
}
}
实现起来太麻烦了,我只是想换个图标而已,java也太不讲人情了,需要写这么多代码.于是我尝试这样直接设置:
JTree leftTree = new JTree();
((DefaultTreeCellRenderer)leftTree.getCellRenderer()).setClosedIcon(myClosedIcon);
这样的问题是,如果你需要动态增删JTree的结点,调用UpdateUI()方法后,显示的图标又变为默认的图标.你还得在调用updateUI()后重新调用上面语句.
最后我想到使用匿名类的方法如下:
leftTree.setCellRenderer(new DefaultTreeCellRenderer(){
public Icon getClosedIcon() {
//返回你需要的图标
return myClosedIcon
}
});
3。JTree使用经验总结 来源自 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=607847
在实际开发过程中会经常使用JTree组件,平时会遇到这样或那样的问题,在此将偶得一点经验写下来,与大家共享,希望对大家有所帮助。
private JTree jtNetDevice;//数组件申明
private JScrollPane jspTree;//滚动面板申明
1、初始化
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("root");
jtNetDevice = new JTree(rootNode);
jtNetDevice.setAutoscrolls(true);
getTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//设置单选模式
jspTree = new JScrollPane();
jspTree.getViewport().add(jtNetDevice, null);
2、三个经常使用的取值函数
private DefaultTreeModel getTreeModel(){
return (DefaultTreeModel)jtNetDevice.getModel();
}
private DefaultMutableTreeNode getRootNode(){
return (DefaultMutableTreeNode)getTreeModel().getRoot();
}
private TreeSelectionModel getTreeSelectionModel(){
return jtNetDevice.getSelectionModel();
}
3、根据node得到path:
TreePath visiblePath = new TreePath(getTreeModel().getPathToRoot(node));
4、根据Path展开到该节点
jtNetDevice.makeVisible(visiblePath);
5、根据path设定该节点选定
jtNetDevice.setSelectionPath(visiblePath);
6、选中节点的方法
首先,根据节点得到树路径,其中chosen为需要选中的节点
TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jtNetDevice.getModel()).
getPathToRoot(chosen));
然后根据Path选中该节点
jtNetDevice.setSelectionPath(visiblePath);
7、滚动到可见位置
jtNetDevice.scrollPathToVisible(visiblePath);
8、给JTree添加右键弹出菜单
void jtNetDevice_mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
jPopupMenu1.show(e.getComponent(), e.getX(), e.getY());//弹出右键菜单
}
}
9、关于JTree的展开
// If expand is true, expands all nodes in the tree.
// Otherwise, collapses all nodes in the tree.
public void expandAll(JTree tree, boolean expand) {
TreeNode root = (TreeNode)tree.getModel().getRoot();
// Traverse tree from root
expandAll(tree, new TreePath(root), expand);
}
private void expandAll(JTree tree, TreePath parent, boolean expand) {
// Traverse children
TreeNode node = (TreeNode)parent.getLastPathComponent();
if (node.getChildCount() >= 0) {
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
expandAll(tree, path, expand);
}
}
// Expansion or collapse must be done bottom-up
if (expand) {
tree.expandPath(parent);
} else {
tree.collapsePath(parent);
}
}
10、如何遍历JTree
// 创建树
JTree tree = new JTree();
// 添加树节点......
// 遍历所有节点
visitAllNodes(tree);
// 仅遍历展开的节点
visitAllExpandedNodes(tree);
// Traverse all nodes in tree
public void visitAllNodes(JTree tree) {
TreeNode root = (TreeNode)tree.getModel().getRoot();
visitAllNodes(root);
}
public void visitAllNodes(TreeNode node) {
// node is visited exactly once
process(node);
if (node.getChildCount() >= 0) {
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
visitAllNodes(n);
}
}
}
// Traverse all expanded nodes in tree
public void visitAllExpandedNodes(JTree tree) {
TreeNode root = (TreeNode)tree.getModel().getRoot();
visitAllExpandedNodes(tree, new TreePath(root));
}
public void visitAllExpandedNodes(JTree tree, TreePath parent) {
// Return if node is not expanded
if (!tree.isVisible(parent)) {
return;
}
// node is visible and is visited exactly once
TreeNode node = (TreeNode)parent.getLastPathComponent();
process(node);
// Visit all children
if (node.getChildCount() >= 0) {
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
visitAllExpandedNodes(tree, path);
}
}
}
4。JTree的事件监听 来源自 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=623509
import javax.swing.tree.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
使用流程:
1,JTree tree = createTree();//得到JTree对象,createTree()见文后
2,DefaultTreeCellRenderer render = new DefaultTreeCellRenderer();
tagTree.setCellRenderer( render );//设置Tree的Render模式
3,thdTree.addTreeSelectionListener(
new TreeSelectionListener()
{
public void valueChanged(TreeSelectionEvent e){
}
}
);//增加选中节点的监听器
private void createTree()
{
//一般构造方法
JTree tree;
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
DefaultTreeModel treeModel=new DefaultTreeModel(root);
root.setAllowsChildren(true);
tree = new JTree(treeModel);
DefaultTreeCellRenderer treeRender = new DefaultTreeCellRenderer();
treeRender.setOpaque(true);
tree.setCellRenderer(treeRender);
ToolTipManager.sharedInstance().registerComponent(tree);
tree.setName("tagTree");
return tree;
}
5。使用jdom操作xml数据,生成含Jtree的applet 来源自Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=120876
关键词:xml,jdom,applet,jtree
在我们工作中,常常会碰到树形组件的生成问题,如果你在开发web application,纯粹使用
javascript来生成树形组件是非常繁琐的,而且交互性也不不太好。所以许多产品使applet来实现树形组件的功能。比如说,weblogic,jboss等产品的console.所以,把树形数据组织成xml文件,用jdom剖析它,最后生成applet就非常有通用的意义。下面,我就给出一个例子,抛砖引玉。
1.准备一个存有属性数据的xml文件,把它放在classpath中,我这里是org.xml。
[pre]<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSPY v5 rel. 3 U (http://www.xmlspy.com)-->
<node xmlns="http://www.javabox.com/schemas/org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.javabox.com/schemas/org
E:/myDemo/org.xsd" name="组织机构" id="-1" desc="" link="#">
<node name="总经理" id="1" desc="" link="#">
<node name="管理副总经理" id="2" desc="" link="#"/>
<node name="生产副总经理" id="3" desc="" link="#">
<node name="项目部" id="7" desc="" link="#"/>
<node name="机械公司" id="8" desc="" link="#"/>
<node name="贝盟公司" id="9" desc="" link="#"/>
<node name="洛斯韦公司" id="9" desc="" link="#"/>
</node>
<node name="总工程师" id="4" desc="" link="#"/>
<node name="总会计师" id="5" desc="" link="#"/>
<node name="总经济师" id="6" desc="" link="#"/>
</node>
</node>[/pre]
2.确保你可以使用jdom解析器,你如果没有可以去这里下载。
3.用于代表树结点节点的javabean,TreeNode.java
package com.javabox.jtree;
public class TreeNode{
private String id;
private String name;
private String link;
public TreeNode(String id,String name,String link){
this.id=id;
this.name=name;
this.link=link;
}
public String getId(){
return id;
}
public void setId(String Id){
this.id=Id;
}
public void setName(String Name){
this.name=Name;
}
public String getName(){
return name;
}
public String toString(){
return name;
}
public String getLink(){
return link;
}
public void setLink(String link){
this.link=link;
}
}
4.自己写的TreeCellRenderer,IconRender.java
package com.javabox.jtree;
import javax.swing.*;
import java.awt.*;
import javax.swing.tree.*;
import javax.swing.tree.DefaultTreeCellRenderer;
class IconRender
extends DefaultTreeCellRenderer {
//你需要替换成你的icon
public static final Icon leafSelectedIcon = new ImageIcon("greeball.JPG");
public static final Icon leafUnSelectedIcon = new ImageIcon("greyball.JPG");
public static final Icon folderOpen = new ImageIcon("folderopen.JPG");
public static final Icon folderClose = new ImageIcon("folderclose.JPG");
public Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus);
if (leaf && selected) {
setIcon(IconRender.leafSelectedIcon);
}
else if (leaf) {
setIcon(IconRender.leafUnSelectedIcon);
}
return this;
}
public IconRender() {
super();
this.setLeafIcon(leafUnSelectedIcon);
this.setOpenIcon(folderOpen);
this.setClosedIcon(folderClose);
}
}
5.AppletTree.java,该文件解析xml文件,生成含Jtree的applet,你可以把它嵌入到jsp,html文件中使用,也可以直接运行该文件。
package com.javabox.jtree;
import javax.swing.event.*;
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.event.*;
import org.jdom.*;
import org.jdom.input.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import javax.swing.plaf.metal.*;
import java.io.*;
import netscape.javascript.*;
public class AppletTree extends Applet implements TreeSelectionListener
{
private JTree tree;
private TreePath path;
private Panel topPanel;
private DefaultMutableTreeNode top;
private DefaultMutableTreeNode clicknode;
private String link;
public AppletTree(){
}
public void init(){
try{
super.init();
this.setLayout(new GridLayout(1,1));
tree=createTree(new FileInputStream("org.xml"));
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.putClientProperty("JTree.lineStyle","Angled");
tree.setShowsRootHandles(true);
tree.setEditable(false);
tree.addTreeSelectionListener( this );
IconRender render=new IconRender();
tree.setCellRenderer(render);
topPanel=new Panel(new BorderLayout());
topPanel.add(tree);
this.add(topPanel);
}catch(Exception e){
e.printStackTrace();
}
}
public JTree createTree(InputStream is){
SAXBuilder builder = new SAXBuilder();
try {
Document doc = builder.build(is);
Element root=doc.getRootElement();
TreeNode rootNode=new
TreeNode(root.getAttributeValue("id"),root.getAttributeValue("name"),root.getAttributeValue("link"));
top=new DefaultMutableTreeNode(rootNode);
addNode(root,top);
} catch (Exception ex) {
ex.printStackTrace();
}
//你可以在这里改变jtree中连线的颜色,我请教国外的高手才找到的,很酷的哦:)
UIManager.put( "Tree.hash", new ColorUIResource(Color.red) );
return new JTree(top);
}
/**
*
* @param e 待加入树种的jdom元素
* @param rootNode 树根节点
*/
private void addNode(Element e,DefaultMutableTreeNode rootNode){
String id=e.getAttributeValue("id");
String name=e.getAttributeValue("name");
String link=e.getAttributeValue("link");
TreeNode node=new TreeNode(id,name,link);
//如有父节点
Element father=e.getParent();
if(father!=null){
String fid=father.getAttributeValue("id");
DefaultMutableTreeNode fatherNode=getTreeNode(fid,rootNode);
if(fatherNode!=null){
fatherNode.add(new DefaultMutableTreeNode(node));
}
}
//如有子节点
Iterator it=e.getChildren().iterator();
while(it.hasNext()){
Element child=(Element)it.next();
addNode(child,rootNode);
}
}
/**
* 根据id,查找树节点,//广度优先
* @param id 节点id
* @param rootNode 树根节点
* @return DefaultMutableTreeNode
*/
private DefaultMutableTreeNode getTreeNode(String id,DefaultMutableTreeNode rootNode){
DefaultMutableTreeNode returnNode=null;
if(rootNode!=null){
Enumeration enum=rootNode.breadthFirstEnumeration();
while(enum.hasMoreElements()){
DefaultMutableTreeNode temp=(DefaultMutableTreeNode)enum.nextElement();
TreeNode node=(TreeNode)temp.getUserObject();
if(node.getId().equals(id)){
returnNode=temp;
break;
}
}
}
return returnNode;
}
public void valueChanged( TreeSelectionEvent event ){
if( event.getSource() == tree ){
path = event.getPath();
clicknode=(DefaultMutableTreeNode)path.getLastPathComponent();
Object uo=clicknode.getUserObject();
if(uo instanceof TreeNode){
TreeNode nd=(TreeNode)clicknode.getUserObject();
link=nd.getLink();
}
//调用一个javascript函数;
// JSObject.getWindow (this).eval ("javascript:window.open('"+link+"')") ;
}
}
public static void main(String[] args ){
JFrame frame=new JFrame("test");
AppletTree tree=new AppletTree();
tree.init();
frame.getContentPane().add(tree);
frame.setSize(600,600);
frame.show();
}
}
6.运行一个这个类,是不是很cool哦,你还可以把它嵌在网页中,调用javasript函数,达到刷新页面的目的。
希望该文章能对你有所启发,祝你成功!
6。两个JTree之间的单向拖拽 来源自Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=18402
package aabbcc;
import javax.swing.JTree;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragSource;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.datatransfer.StringSelection;
/**
* <p>Title: JTree之间的拖拽中的DragSourceTree</p>
* <p>Description:通过向从“源树”中拖拽结点在目标树中重新构造一棵树,实现JTree之间的拖拽单向拖拽,这个类是“源树”。 </p>
* @author awaysrain(绝对零度)
* @version 1.0
*/
public class DragSourceTree
extends JTree
implements DragGestureListener, DragSourceListener {
private DragSource dragSource = null;
/**
* Construct the source tree
*/
public DragSourceTree() {
super();
dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(this,
java.awt.dnd.DnDConstants.
ACTION_COPY_OR_MOVE, this);
}
/**
* Construct the source tree
* @param treeNode DefaultMutableTreeNode
*/
public DragSourceTree(DefaultMutableTreeNode treeNode) {
super(treeNode);
dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(this,
java.awt.dnd.DnDConstants.
ACTION_COPY_OR_MOVE, this);
}
/**
* dragGestureRecognized
*
* @param dge DragGestureEvent
*/
public void dragGestureRecognized(DragGestureEvent dge) {
java.awt.Cursor cursor = null;
cursor = DragSource.DefaultCopyDrop; //set cursor
java.awt.Point jap = dge.getDragOrigin(); //drag point
int x = (int) jap.getX();
int y = (int) jap.getY();
javax.swing.tree.TreePath tp = this.getPathForLocation(x, y); //get drag node path
if (tp != null) {
DefaultMutableTreeNode node1 = (DefaultMutableTreeNode)
tp.getLastPathComponent(); //get drag node
serializableNode(node1); //Serializable node object
}
//event start
dge.startDrag(cursor, new StringSelection("drag"), this);
}
/**
* dragEnter
*
* @param dsde DragSourceDragEvent
*/
public void dragEnter(DragSourceDragEvent dsde) {
}
/**
* dragOver
*
* @param dsde DragSourceDragEvent
*/
public void dragOver(DragSourceDragEvent dsde) {
}
/**
* dropActionChanged
*
* @param dsde DragSourceDragEvent
*/
public void dropActionChanged(DragSourceDragEvent dsde) {
}
/**
* dragDropEnd
*
* @param dsde DragSourceDropEvent
*/
public void dragDropEnd(DragSourceDropEvent dsde) {
}
/**
* dragExit
*
* @param dse DragSourceEvent
*/
public void dragExit(DragSourceEvent dse) {
}
/**
*Serializable node
*
* @param node DefaultMutableTreeNode
*/
private void serializableNode(DefaultMutableTreeNode node) {
try {
java.io.FileOutputStream objfile = new java.io.FileOutputStream(
"DragNode.OBJ");
java.io.ObjectOutputStream p = new java.io.ObjectOutputStream(objfile);
p.writeObject(node);
p.flush();
objfile.close();
}
catch (java.io.IOException e) {
System.out.println(e.toString());
}
}
}
DragTargetTree.java
package aabbcc;
import javax.swing.JTree;
import java.awt.dnd.DropTargetListener;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTarget;
import java.io.*;
import java.io.*;
import javax.swing.tree.DefaultMutableTreeNode;
/**
* <p>Title: JTree之间的拖拽中的DragTargetTree</p>
* <p>Description:通过向从“源树”中拖拽结点在目标树中重新构造一棵树,实现JTree之间的拖拽单向拖拽,这个类是“目的树” </p>
* @author awaysrain(绝对零度)
* @version 1.0
*/
public class DragTargetTree
extends JTree
implements DropTargetListener {
/**
* Construct the target tree
*/
public DragTargetTree() {
super();
DropTarget dropTarget = new DropTarget(this,
java.awt.dnd.DnDConstants.
ACTION_COPY_OR_MOVE, this);
}
/**
* Construct the target tree
* @param treeNode DefaultMutableTreeNode
*/
public DragTargetTree(DefaultMutableTreeNode treeNode) {
super(treeNode);
DropTarget dropTarget = new DropTarget(this,
java.awt.dnd.DnDConstants.
ACTION_COPY_OR_MOVE, this);
}
/**
* dragEnter
*
* @param dtde DropTargetDragEvent
*/
public void dragEnter(DropTargetDragEvent dtde) {
}
/**
* dragOver
*
* @param dtde DropTargetDragEvent
*/
public void dragOver(DropTargetDragEvent dtde) {
}
/**
* dropActionChanged
*
* @param dtde DropTargetDragEvent
*/
public void dropActionChanged(DropTargetDragEvent dtde) {
}
/**
* drop
*
* @param dtde DropTargetDropEvent
*/
public void drop(DropTargetDropEvent dtde) {
dtde.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY); //accept drop
java.awt.Point ap = dtde.getLocation(); // get event point
int x = (int) ap.getX();
int y = (int) ap.getY();
javax.swing.tree.DefaultMutableTreeNode parnode;
javax.swing.tree.TreePath tp = this.getPathForLocation(x, y);
if (tp != null) {
try {
//get drop tree node with treepath
javax.swing.tree.DefaultMutableTreeNode no1 =
(javax.swing.tree.DefaultMutableTreeNode) tp.getLastPathComponent();
parnode = no1;
int index = parnode.getChildCount();
// get drop tree mode
javax.swing.tree.DefaultTreeModel tm =
(javax.swing.tree.DefaultTreeModel)this.getModel();
javax.swing.tree.DefaultMutableTreeNode node2 =
new javax.swing.tree.DefaultMutableTreeNode();
node2 = readNode();
tm.insertNodeInto(node2, parnode, index);
}
catch (java.lang.Exception e) {
System.out.println(e.toString());
}
}
}
/**
* dragExit
*
* @param dte DropTargetEvent
*/
public void dragExit(DropTargetEvent dte) {
}
/**
*
* read the node
* @return DefaultMutableTreeNode
*/
private DefaultMutableTreeNode readNode() {
FileInputStream objfile = null;
try {
objfile = new java.io.FileInputStream("DragNode.OBJ");
ObjectInputStream q = new ObjectInputStream(objfile);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) q.readObject();
return node;
}
catch (Exception ex) {
return null;
}
}
}
Demo.java
package aabbcc;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
/**
* <p>Title: JTree之间的拖拽测试</p>
* <p>Description:通过向从“源树”中拖拽结点在目标树中重新构造一棵树,实现JTree之间的拖拽单向拖拽,这个类测试的类 </p>
* @author awaysrain(绝对零度)
*/
public class Demo extends JFrame {
JPanel contentPane;
JScrollPane jScrollPane1 = new JScrollPane();
XYLayout xYLayout1 = new XYLayout();
DragSourceTree jTree1 = new DragSourceTree();
JScrollPane jScrollPane2 = new JScrollPane();
DragTargetTree jTree2 = new DragTargetTree();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
//Construct the frame
public Demo () {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();