关于java中JTree添加树的节点的一个小例子_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 关于java中JTree添加树的节点的一个小例子

关于java中JTree添加树的节点的一个小例子

 2012/3/20 13:59:25  Etwo  程序员俱乐部  我要评论(0)
  • 摘要:前段时间用java做了一个QQ项目,也因为第一次做项目,当在做好友列表的时候不知道用什么好,就想到了jtree了,平时也没怎么用过jtree,花了几个小时去学习了一下,下面这个列子就是一个简单的jtree模式,个人觉得只要你懂得了怎么去操作,懂得怎样去添加一个节点和一片叶子,那么java中的这个树你也理解了差不多了吧...呵呵~下面贴出代码,供分享...packagenet.etwo.jtree.example;importjava.awt.BorderLayout;importjava
  • 标签:例子 Java 一个
前段时间用java做了一个QQ项目,也因为第一次做项目,当在做好友列表的时候不知道用什么好,就想到了jtree了,平时也没怎么用过jtree,花了几个小时去学习了一下,下面这个列子就是一个简单的jtree模式,个人觉得只要你懂得了怎么去操作,懂得怎样去添加一个节点和一片叶子,那么java中的这个树你也理解了差不多了吧...呵呵~下面贴出代码,供分享...

package net.etwo.jtree.example;

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

public class TestMyJTree {

private JFrame jframeMain = new JFrame("我的java树");
private JPanel jpanelMain = new JPanel();

private JTree jtree;

// 设置此节点为根节点
private DefaultMutableTreeNode dmtmRoot = new DefaultMutableTreeNode("中国");

private DefaultMutableTreeNode dmtmSichuan = new DefaultMutableTreeNode(
"四川");

private DefaultMutableTreeNode dmtmChengdu = new DefaultMutableTreeNode(
"成都");

private DefaultMutableTreeNode dmtmDujiangyan = new DefaultMutableTreeNode(
"都江堰");

private DefaultMutableTreeNode dmtmChongQing = new DefaultMutableTreeNode(
"重庆");

private DefaultMutableTreeNode dmtmSPB = new DefaultMutableTreeNode("沙坪坝");

private DefaultMutableTreeNode dmtm;

private JScrollPane jspMain;

// 定义需要被拖动的某个节点
private TreePath movePath;

public void init() {
jtree = new JTree(dmtmRoot);
// 设置根节点是否可见,默认为可见
// jtree.setRootVisible(false);
jspMain = new JScrollPane(jtree);
dmtmRoot.add(dmtmSichuan);
dmtmRoot.add(dmtmSichuan);
dmtmChongQing.add(dmtmSPB);
dmtmSichuan.add(dmtmChengdu);
dmtmSichuan.add(dmtmDujiangyan);
dmtmRoot.add(dmtmChongQing);

for (int i = 0; i < 10; i++) {
dmtm = new DefaultMutableTreeNode(i);
dmtmRoot.add(dmtm);
}

// 设置其没有连线
jtree.putClientProperty("JTree.lineStyle", "None");
// 设置是否显现其根节点的图标
jtree.setShowsRootHandles(true);

jpanelMain.setLayout(new BorderLayout());
jpanelMain.add(jspMain);
jframeMain.add(jpanelMain);
jframeMain.pack();
jframeMain.setLocationRelativeTo(null);
jframeMain.setSize(264, 400);
jframeMain.setDefaultCloseOperation(jframeMain.EXIT_ON_CLOSE);
jframeMain.setVisible(true);

// 设置可以编辑
jtree.setEditable(true);

// 添加鼠标事件
MouseListener ml = new MouseAdapter() {

// 定义要被拖动的TreePath 来获取某个节点
TreePath tp;

// 鼠标按下的时候
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
// super.mousePressed(e);
// 获取某个节点 并 //返回指定位置的节点
tp = jtree.getPathForLocation(e.getX(), e.getY());
if (tp != null) {
movePath = tp;// 指定要拖动的节点
}
}

// 当鼠标松开的时候
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
// super.mouseReleased(e);
// 鼠标松开的时候获取指定位置的节点
tp = jtree.getPathForLocation(e.getX(), e.getY());
if (tp != null && movePath != null) {
// 阻止向子节点拖动 并且 拖动到的不是本身
if (movePath.isDescendant(tp) && movePath != tp) {
System.out.println("非法操作");
return;
}
// 不是向子节点拖动,也不是拖动到同一个节点
else if (movePath != tp) {
// 打印被拖动到的最后节点
System.out.println(tp.getLastPathComponent());
// add方法可以先将原节点从原父节点删除,再添加到新父节点中去

// 得到最后一个节点
DefaultMutableTreeNode dmtnLastPath = (DefaultMutableTreeNode) tp
.getLastPathComponent();
// 得到鼠标点击时的节点
DefaultMutableTreeNode dmtnFirstPath = (DefaultMutableTreeNode) movePath
.getLastPathComponent();

// 加节点
dmtnLastPath.add(dmtnFirstPath);
// 更新
jtree.updateUI();
}
}

}
};

jtree.addMouseListener(ml);

}

public static void main(String[] args) {
new TestMyJTree().init();
}
}




发表评论
用户名: 匿名