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 ...
随机推荐
- [洛谷P4768] [NOI2018]归程 (kruskal重构树模板讲解)
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并 ...
- .net core Fundamentals
• Application Startup 應用程序啟動 • Middleware 中間件 • Working with Static Files 靜態文件 • Routing 路由 • URL Re ...
- Java面试知识总结三
1.SpringMVC在项目中的应用? 1)service层,项目的业务逻辑层,一般先定义一个接口,在写一个实现类,实现所有的接口方法.service的实现类中要加注解@Service(用于标注业务层 ...
- Android应用程序App应用上线流程
对于很多初级开发者,可能对app应用上线不太了解,本文跟大家介绍一下怎么上线app应用.上线App并不是一件很困难的事情,App的应用功能也不需要很强大,甚至不用联网,只有简单的一两个页面的App应用 ...
- 一种通过HTTP传文件出网的姿势
在外网机器上运行文件服务接收服务 root@kali:~/pentest-script/FileTransfer/HttpServer# python3 SimpleHttpUpload.py Ser ...
- arch中yaourt的安装和使用
yaourt-Yet AnOther User Repository Tool Yaourt是archlinux方便使用的关键部件之一,但没有被整合到系统安装中的工具.建议在装完系统重启之后,更新完p ...
- perl中设置POST登录时的重定向
默认地, perl提交post登录时是不会重定向的 要让它重定向, 可以用如下方法: my $cookie = HTTP::Cookies->new(); push @{$ua->requ ...
- Django 1.10中文文档-第一个应用Part5-测试
本教程上接教程Part4. 前面已经建立一个网页投票应用,现在将为它创建一些自动化测试. 自动化测试简介 什么是自动化测试 测试是检查你的代码是否正常运行的行为.测试也分为不同的级别.有些测试可能是用 ...
- 【swupdate文档 一】嵌入式系统的软件管理
嵌入式系统的软件管理 嵌入式系统变得越来越复杂, 它们的软件也反映了这种复杂性的增加. 为了支持新的特性和修复,很有必要让嵌入式系统上的软件 能够以绝对可靠的方式更新. 在基于linux的系统上,我们 ...
- C基础入门 - 第一章 - C语言绪言
第1章 C语言绪言 1.1 C语言概述 1.1.1 C语言世界 1.1.2 C语言学习, 能当饭吃吗 1.2 开发环境构建 1.2.1 visual studio安装使用 1.2.2 visual s ...