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 ...
随机推荐
- js对数组的常用操作
在js中对数组的操作是经常遇到的,我呢在这就列一下经常用到的方法 删除数组中的元素: 1.delete方法:delete删除的只是数组元素的值,所占的空间是并没有删除的 代码: var arr=[12 ...
- 图论:最短路-Bellman-Ford
我们之前介绍了一种,(最常用的)SPFA算法,SPFA算法是对Bellman-Ford算法的队列优化,用队列替代了Bellman-Ford中的循环检查部分 然后这里我们介绍Bellman-Ford算法 ...
- vijos 1037 背包+标记
描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔. Mr. F有N块水晶,每块 ...
- LightOJ 1009 二分图染色+BFS/种类并查集
题意:有两个阵营的人,他们互相敌对,给出互相敌对的人,问同个阵营的人最多有多少个. 思路:可以使用种类并查集写.也可以使用使用二分图染色的写法,由于给定的点并不是连续的,所以排序离散化一下,再进行BF ...
- 编译 redis 报错 error: jemalloc/jemalloc.h: No such file or directory
gcc编译redis时报错: zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory zmalloc.h:55:2 ...
- VM 脚本回快照和开关机
#Import PowerCLI*Get-Module -ListAvailable PowerCLI* | Import-Module #Resolve login issueSet-PowerCL ...
- Robot Framework 自定义关键字 Ignore error
以上是关键字的完整写法. 一下是调用该关键字的实例.
- Chrome浏览器启动页被360导航篡改解决方法
右键Chrome浏览器快捷方式,选择“属性”,在“目标”的结尾处有添加的网址,删了即可. 2 如果在结尾处没有任何网址,可以添加“ -nohome”,这样下次启动时,就会打开一个空白页,也就不会打开被 ...
- 【vijos】P1448 校门外的树
[题意]两种操作,[L,R]种新的树(不覆盖原来的),或查询[L,R]树的种类数.n<=50000. [算法]树状数组||线段树 [题解]这题可以用主席树实现……不过因为不覆盖原来的,所以有更简 ...
- Vue 键盘事件
Vue2键盘事件:keydown/keyup... 1.使用 <!DOCTYPE html> <html> <head> <title></tit ...