`
lg_asus
  • 浏览: 185023 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JTree

阅读更多
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class JTreeDemo2 implements ActionListener,TreeModelListener{
	JLabel label = null;
	JTree tree = null;
	DefaultTreeModel treeModel = null;
	String nodeName = null;//原節點名稱
	JButton button1,button2,button3;
	
	public JTreeDemo2(){
		JFrame jf = new JFrame("JTreeDemo2");
		Container contentPane = jf.getContentPane();
		
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("資源管理器");
		
		tree = new JTree(root);
		tree.setEditable(true);
		tree.addMouseListener(new MouseHandle2());
		treeModel = (DefaultTreeModel)tree.getModel();
		treeModel.addTreeModelListener(this);
		
		tree.addMouseListener(new MouseAdapter(){
			@Override
			public void mousePressed(MouseEvent e){
				TreePath treePath = tree.getPathForLocation(e.getX(), e.getY());
				if(treePath!=null){
					button1.setEnabled(true);
					button2.setEnabled(true);
				}else{
					button1.setEnabled(false);
					button2.setEnabled(false);
				}
			}
		});
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setViewportView(tree);
		
		JPanel panel = new JPanel();
		button1 = new JButton("新增節點");
		button1.addActionListener(this);
		button1.setEnabled(false);
		panel.add(button1);
		
		button2 = new JButton("刪除節點");
		button2.addActionListener(this);
		button2.setEnabled(false);
		panel.add(button2);
		
		button3 = new JButton("清除所有節點");
		button3.addActionListener(this);
		panel.add(button3);
		
		label = new JLabel("Action");
		contentPane.add(panel,BorderLayout.NORTH);
		contentPane.add(scrollPane,BorderLayout.CENTER);
		contentPane.add(label,BorderLayout.SOUTH);
		
		jf.pack();
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String...args){
		new JTreeDemo2();
	}
	
	
	@Override
	public void actionPerformed(ActionEvent e){
		if(e.getSource()==button1){
			DefaultMutableTreeNode parentNode = null;
			DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新增節點");
			newNode.setAllowsChildren(true);
			TreePath treePath = tree.getSelectionPath();
			if(treePath!=null){
				parentNode = (DefaultMutableTreeNode) treePath.getLastPathComponent();
				System.out.println("parentNode:"+parentNode.getUserObject());
				treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount());
				tree.scrollPathToVisible(new TreePath(newNode.getPath()));
				label.setText("新增節點成功");
			}
		}
		if(e.getSource()==button2){
			TreePath treePath = tree.getSelectionPath();
			System.out.println(treePath);
			if(treePath!=null){
				DefaultMutableTreeNode selectionNode = (DefaultMutableTreeNode)treePath.getLastPathComponent();
				TreeNode parentNode = selectionNode.getParent();
				if(parentNode!=null){
					treeModel.removeNodeFromParent(selectionNode);
					label.setText("刪除節點成功");
				}
			}
		}
		if(e.getSource()==button3){
//			button1.setEnabled(false);
//			button2.setEnabled(false);
			DefaultMutableTreeNode root = (DefaultMutableTreeNode) treeModel.getRoot();
			root.removeAllChildren();
			treeModel.reload();
			tree.repaint();
			
			label.setText("清除所有節點成功");
		}
	}
	
	@Override
	public void treeNodesChanged(TreeModelEvent e){
		TreePath treePath = e.getTreePath();
		DefaultMutableTreeNode node = (DefaultMutableTreeNode)treePath.getLastPathComponent();
		try{
			int[] index = e.getChildIndices();
			node = (DefaultMutableTreeNode) node.getChildAt(index[0]);
		}catch(NullPointerException ne){
			System.out.println("你選擇的是根節點,它沒有子節點");
		}
		label.setText(nodeName+"更改數據為:"+(String)node.getUserObject());
	}
	
	@Override
	public void treeNodesInserted(TreeModelEvent e){
		System.out.println("New Node Inserted");
	}
	@Override
	public void treeNodesRemoved(TreeModelEvent e){
		System.out.println("Node Deleted");
	}
	@Override
	public void treeStructureChanged(TreeModelEvent e){
		System.out.println("structure changed");
	}
	
	class MouseHandle2 extends MouseAdapter{
		@Override
		public void mousePressed(MouseEvent e){
			try{
				TreePath treePath = tree.getSelectionPath();
				
				/*JTree tree = (JTree)e.getSource();
				int rowLocation = tree.getRowLocation(e.getX(),e.getY());
				TreePath treePath = tree.getPathForRow(rowLocation);
				*/
				DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)treePath.getLastPathComponent();
				
//				TreeNode treeNode2 = (DefaultMutableTreeNode)treePath.getLastPathComponent();
				nodeName = (String) treeNode.getUserObject();
			}catch(NullPointerException ne){
				System.out.println("nullpointer");
			}
		}
	}
}


參考:深入淺出Java Swing程序設計
分享到:
评论

相关推荐

    如何使用JTree,JTree使用方法

    JTree的使用 JTree的使用 JTree的使用

    jtree

    jtree中加checkbox,实用哦。

    jTree和jTable 双向联动

    实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。

    JTree的例子,可以拖动节点

    JTree的例子,可以拖动节点 JTree的例子,可以拖动节点

    Java JTree+JTable应用

    java JTree+JTable使用样例,实现将JTree的节点内容显示到JTable中,eclipse导入maven项目 maven编译: mvn clean package

    JAVA JTREE JTABLE实例代码

    JAVA JTREE实例代码、JAVA JTABLE实例代码

    JTree 树形菜单插件包.rar

    JTree 树形菜单插件包下载,在网页上快速实现树控菜单的一个小插件,功能相对完善,本次更新功能:加入treeNodes(数组形式),通过treeNodes可以对指定的子树进行收缩和展开功能,查找指定节点的功能。加入这个功能...

    JTree用法及JTree使用经验总结及源码

    JTree用法及JTree使用经验总结(吐血推荐) 1、初始化 2、三个经常使用的取值函数 3、根据node得到path:4、根据Path展开到该节点 5、根据path设定该节点选定 6、选中节点的方法 7、滚动到可见位置 8、给JTree添加右键...

    java使用jtree动态实现二叉树

    java使用jtree动态实现二叉树,包含二叉树的插入删除很查找

    java swing-jtree的用法

    JTree上的每一个节点就代表一个TreeNode对象,TreeNode本身是一个Interface,里面定义了7个有关节点的方法,例如判断是否 为树叶节点、有几个子节点(getChildCount())、父节点为何(getparent())等等、这些方法的定义...

    JTree的用法

    JTree的用法

    jtree带复选框的例子

    jtree带复选框的 很典型的例子 当子节点有一个没有被选中时 父节点及其父父结点均不会被选中

    JTree原生样式设置Demo.rar

    JTree tree = new JTree(root); tree.setRootVisible(false);//不显示树的根节点 tree.setRowHeight(20);//树节点的行高为20像素 tree.setFont(new Font("宋体", Font.BOLD, 14));//设置树结点的字体 //...

    java组件之jtree使用

    java组件之jtree使用 10-1:使用JTree组件: 10-2:以Hashtable构造JTree: 10-3:以TreeNode构造JTree: . . . . 10-8:JTree的其他操作:

    jtree节点可编辑

    jtree节点可编辑

    jtree的经典教程

    jtree , 经典教程,jtree 例子 ,很适合初学者,和急需使用的读者,一看就会

    JTree控件的使用

    在java中,树对象提供了用树型结构分层显示数据的视图。可以扩展和收缩视图中的单个子树。树由Swing中的JTree类实现,JTree是Jcomponent的子类。文档就介绍了JTree的使用

    JTree设置不同图标

    JTree设置QQ好友树形列表中不同好友的图像,采用swing组件

    JTree用法大全 swing java

    JTree用法大全,各种使用方法demo,介绍,并附注释。

    java中JTree高级编程

    java中的关于jtree编程的详细介绍,通过jtree的使用,掌握模型设计的核心技术,同时丰富了java界面的美观度和实用度。

Global site tag (gtag.js) - Google Analytics