JTree 常用方法
package com.swing.demo; import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List; import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel; import com.swing.model.User; /**
* JTree 常用方法.
* @author Administrator
*
*/
public class TreeDemo {
public static void main(String[] args) {
final JTree tree = createTree();
// 窗体设置
JFrame frame = new JFrame("JTreeDemo");
// 构造完树之后还要把树放在JScollPanel上,否则树显示会有问题
JScrollPane treeView = new JScrollPane(tree);
frame.add(treeView);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加树节点选择事件
tree.addTreeSelectionListener(new TreeSelectionListener() { @Override
public void valueChanged(TreeSelectionEvent e) {
// 取得TreePath
// TreePath newPath = event.getNewLeadSelectionPath();
// TreePath oldPath = event.getOldLeadSelectionPath();
// 通过JTree取得Node
// JTree tree = (JTree) event.getSource();
// tree.getLastSelectedPathComponent();
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
if (node == null) {
return;
} Object object = node.getUserObject();
if (node.isLeaf()) {
User user = (User) object;
System.out.println("你选择了:" + user.toString());
} // 取得根节点:
TreeNode rootNode = (TreeNode) tree.getModel().getRoot();
// 取得树的数据模型:
DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel();
// 取得树的某一个节点的位置:
TreePath nodePath = new TreePath(treeModel.getPathToRoot(node));
// 设置节点的展开选择和可见性:
tree.setSelectionPath(nodePath);
tree.makeVisible(nodePath);
// 展开后滚动至节点可见:
tree.scrollPathToVisible(nodePath);
// 还有一个是设置鼠标点击展开树节点的(默认是双击,改成了0就是不可点击):
tree.setToggleClickCount(1);
// 另外就是一个设置Cell的高度的,但这个方法我们一般不用,大多时候是在Renderer里设置的,因为这样设置可能有UI问题:
// tree.setRowHeight(15);
} });
// 树节点展开(折叠) 事件
tree.addTreeExpansionListener(new TreeExpansionListener() {
@Override
public void treeExpanded(TreeExpansionEvent event) {
} @Override
public void treeCollapsed(TreeExpansionEvent event) {
} }); tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)
&& e.getClickCount() == 1) {
// Returns the last path component
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
} else if (SwingUtilities.isRightMouseButton(e)) {
// Returns the row for the specified location.
// int selectRow = tree.getRowForLocation(e.getX(),
// e.getY());
// Returns the path for the node at the specified location.
TreePath selectPath = tree.getPathForLocation(e.getX(),
e.getY());
if (selectPath != null) {
// set select
tree.setSelectionPath(selectPath);
// get tree node.
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) selectPath
.getLastPathComponent();
}
}
}
}); // 渲染器
tree.setCellRenderer(new DefaultTreeCellRenderer() {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L; @Override
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus) {
return super.getTreeCellRendererComponent(tree, value, sel,
expanded, leaf, row, hasFocus);
}
});
} /**
* createTree
*
* @return
*/
private static JTree createTree() {
// 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
// public DefaultMutableTreeNode(Object userObject)
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("软件部");
node1.add(new DefaultMutableTreeNode(new User("小花")));
node1.add(new DefaultMutableTreeNode(new User("小虎")));
node1.add(new DefaultMutableTreeNode(new User("小龙"))); DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("销售部");
node2.add(new DefaultMutableTreeNode(new User("小叶")));
node2.add(new DefaultMutableTreeNode(new User("小雯")));
node2.add(new DefaultMutableTreeNode(new User("小夏"))); DefaultMutableTreeNode top = new DefaultMutableTreeNode("职员管理");
top.add(new DefaultMutableTreeNode(new User("总经理")));
top.add(node1);
top.add(node2);
// JTree(TreeNode root)
// 返回 JTree,指定的 TreeNode 作为其根,它显示根节点。
JTree tree = new JTree(top);
// 最终JTree也是通过setModel设置数据的:
// tree = new JTree();
// tree.setModel(treeModel);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
return tree;
} private List<TreeNode> treeNodeList = new ArrayList<TreeNode>(); /**
* 从任何节点递归其下所有的例子.
*
* @param treeNode
*/
public void getChildNodeList(TreeNode treeNode) { if (treeNode == null) {
throw new RuntimeException("error treenode.");
} if (treeNodeList == null) {
treeNodeList = new ArrayList<TreeNode>();
} if (treeNode.getChildCount() >= 0) {
for (Enumeration<TreeNode> e = treeNode.children(); e
.hasMoreElements();) {
TreeNode childNode = (TreeNode) e.nextElement();
treeNodeList.add(childNode);
getChildNodeList(childNode);
}
}
}
}
JTree 常用方法的更多相关文章
- JTree常用方法
private JTree jtNetDevice;//数组件申明private JScrollPane jspTree;//滚动面板申明 1.初始化 DefaultMutableTreeNo ...
- Java中的常用方法
Java中的常用方法 第一章 字符串 1.获取字符串的长度:length() 2.判断字符串的前缀或后缀与已知字符串是否相同 前缀 startsWith(String s).后缀 endsWit ...
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- Jquery元素选取、常用方法
一:常用的选择器:(李昌辉) 基本选择器 $("#myDiv") //匹配唯一的具有此id值的元素 $("div") //匹配指定名称的所有元素 $(" ...
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
- C# Webbrowser 常用方法及多线程调用
设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...
- list,tuple,dict,set常用方法
Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...
- JTree实现好友列表
最近学习了一下JTree的使用方法: 先来看一下树的实例: 构建一个树, DefaultMutableTreeNode root = new DefaultMutableTreeNode(" ...
- 记录yii2-imagine几个常用方法
记录yii2-imagine几个常用方法: //压缩 Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)->save(Yii::g ...
随机推荐
- poj 2449 Remmarguts' Date (k短路模板)
Remmarguts' Date http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Total Subm ...
- mysql 创建视图
1.单表创建视图 例如:创建一个选择语句,选出学生的编号,姓名和考号 //创建一个视图名字为stu_view1选择 来自数据表student中的id,name 和kn 中的数据 create view ...
- 适配器模式 C#
适配器模式 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. ● Target目标角色:该角色定义把其他类转换为何种接口,也就是我们的期望接 ...
- Go从入门到精通(持续更新)
1.0 搭建环境 由于我们 Go官方网站 在我大天朝被和谐了,所以我们只能去 Go语言中文网 来下载了.Go的安装很简单,不像Java还要配置一大堆的东西,选择自己系统的对应版本,下载安装,像安装QQ ...
- Transformation(线段树+HDU4578+多种操作+鬼畜的代码)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 题目: 题意:n个数初始值为0,进行四种操作:1.将区间内的数字加c:2.将区间内的数字乘c:3 ...
- Quartz的Properties文件解析
将可变信息放在properties文件是使配置更加灵活. 1.文档位置和加载顺序 1. StdSchedulerFactory默认加载quartz包下的quartz.properties文件,如果我们 ...
- php中类的static变量使用
<?php #访问静态变量 #类外部: 类名::$类变量名 #类内部: 娄名::$类变量名或self::$类变量名 class Char{ public static $number = 0; ...
- humble_USACO
Humble Numbers For a given set of K prime numbers S = {p1, p2, ..., pK}, consider the set of all num ...
- printk %pF %pS含义【转】
作者:啐楼链接:https://www.zhihu.com/question/37769890/answer/73532192来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- Sql Server 2014/2012/2008/2005 数据库还原出现 3154错误的解决办法
在Sql Server 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决,如果不行参照方法 ...