java中jtree双击叶节点如何获取该文件所在的路径

java中jtree双击叶节点如何获取该文件所在的路径~

一个读写XML文件的类

首先必须获得XML Parser的包,可以从下面的地址获得: http://xml.apache.org/xerces2-j/index.html。

然后设计一个XMLTree的类,继承自JTree类的定义和成员变量,函数定义如下:

public class XMLTree extends JTree{ private DefaultMutableTreeNode treeNode; //JTree的根节点 private DocumentBuilderFactory dbf; // 这三个成员变量是xml parser需要的 private DocumentBuilder db; private Document doc; XMLTree(String fileName); //构造函数,做初始化工作 public DefaultMutableTreeNode LoadFile(Node root); //从某个XML文件生成该树 public void SaveToFile(DefaultMutableTreeNode root,FileWriter fw); //将该树存盘成XML文件 private Node parseXml( String text ) }

其中构造函数所做的初始化工作如下:

XMLTree(String fileName){ dbf = DocumentBuilderFactory.newInstance(); //生成dbf的实例 db = dbf.newDocumentBuilder(); //生成db的实例 treeNode = LoadFile( getXMLRoot( text ) ); //解析该xml文件,返回JTree的根节点 setModel( new DefaultTreeModel( treeNode ) ); //根据该根节点生成JTree }

其中,parseXml是一个返回XML文件根元素的程序,如下:

private Node getXMLRoot( String text ){ ByteArrayInputStream byteStream; byteStream = new ByteArrayInputStream( text.getBytes() ); //将XML文件读到Stream里去 try{ doc = db.parse( byteStream ); //解析该xml文件。 } catch ( Exception e ) { e.printStackTrace();} return ( Node )doc.getDocumentElement(); //返回该XML文件的DOM树的根元素 }

核心部分的LoadFile是一个递归过程,如下:

private DefaultMutableTreeNode createTreeNode( Node root ){ DefaultMutableTreeNode treeNode = null; //定义要返回的根节点 String name = root.getNodeName(); //获得该节点的NodeName String value = root.getNodeValue(); //获得该节点的NodeValue treeNode = new DefaultMutableTreeNode( root. getNodeType() == Node.TEXT_NODE ? value : name ); //如果为值节点,那么取得该节点的值,否则取得该节点的Tag的名字 if ( root.hasChildNodes() ) //如果该节点有孩子节点,那么递归处理该节点的孩子节点 { NodeList children = root.getChildNodes(); //取得该节点的子节点列表 if( children != null ){ //判断子节点是否为空 int numChildren = children.getLength(); //取得字节数目 for (int i=0; i 0 ) { treeNode.add(new DefaultMutableTreeNode(node.getNodeValue())); //如果该节点没有孩子节点,那么直接加到节点下 } } } } } } } return treeNode; //返回节点 }

使用Java的Swing包里的方法能够很容易地在JTree上做改动,可以使用弹出对话框的方法,也可以直接在JTree上改动。总之,JTree改动后,需要重新写回文件中去将一棵JTree写成XML文件是一个递归的过程,方法如下:

public void SaveToFile(DefaultMutableTreeNode, FileWriter fw) {try { if (root.isLeaf()) fw.write(root.toString()+“
”); //如果是叶子节点则直接将该节点输出到文件中     else { //不是叶子节点的话递归输出该节点 fw.write(“
”); for (int i=0; i
”); } } catch (Exception e) { e.printStackTrace(); } }

必须注意的是,如果XML文件中包含中文,那么需要在调用上面的函数之前,先在文件中输入该XML文件的编码方式,方法如下:

fw.write(“
”);

在调用该函数结束后,还应该关闭该文件,方法是:

fw.close()

得到叶子可以用getLeaf()之类的方法。得到名字用getUserObject()好像是。如果你用的Eclipse会提示你的~或者查查API。记不大清楚了~祝你好运~

1.函数isLeaf()判断是否为叶节点。
2.方法一:写一个类继承DefaultMutableTreeNode,里面加一个路径变量,双击的时候取出该路径变量
方法二:将DefaultMutableTreeNode 设置其节点的text为路径,用的时候取出来。

java中jtree双击叶节点如何获取该文件所在的路径
答:XMLTree(String fileName){ dbf = DocumentBuilderFactory.newInstance(); //生成dbf的实例 db = dbf.newDocumentBuilder(); //生成db的实例 treeNode = LoadFile( getXMLRoot( text ) ); //解析该xml文件,返回JTree的根节点 setModel( new DefaultTreeModel( treeNode ) ); //根据该根节点生...

java的JTree的使用方法,
答:·JTree(TreeNode root) 建立以root为根的树。·JTree(TreeNode root,Boolean children) 建立以 root 为根的树,并设定是否允许有子节点。·JTree(Vector value) 利用Vector建立树。使用一个JTree可以简单地像下面这样表示:import javax.swing.JFrame;import javax.swing.JTree;import javax.swing.e...

java swing jtree 什么是树的数据模型
答:root.add(country);...DefaultTreeModel treeModel = new DefaultTreeModel(root);//用根节点构建一个DefaultTreeModel树模型 JTree tree = new JTree(treeModel);//用这个树模型构建一个JTree树 或者,直接将根节点传递给JTree构造器,那么这课树会自动构建一个默认的树模型:JTree tree = new JT...

java问题,怎样从数据库动态获得jtree节点
答:import java.io.*;public class Test13{ public static void main(String[] args) throws Exception{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriverManager.getConnection("jdbc:odbc:folkmusic");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("s...

谁能详细介绍一下java swing里的JTable JTree是怎样用的以及他们的方法...
答:与AWT的event包类似。它们都包括事件类和监听器接口。swing.pending包包含了没有完全实现的Swing组件。swing.table包中主要包括了表格组建(JTable)的支持类。swing.tree同样是JTree的支持类。swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于显示和编辑文档的包。

...将第一个界面上的JTree 放到第二个界面上的左边?
答:干嘛这么蛋疼用HTML框架不就可以么 树形菜单不一直在左面

在java中怎么给树中节点添加监视器
答:即Tree tree=new JTree(root);给它添加监听器,tree.addTreeSelectListener(this);最后实现TreeSelectionListener接口中的 public void valueChanged(TreeSelectEvent e);方法即可。示例:public void valueChanged(TreeSelectEvent e){ if(e.getSource()==tree){ DefaultMutableTreeNode node= (Default...

swing中JTree的图标怎么设置效果像下图
答:DefaultTreeCellRenderer();cellRenderer.setClosedIcon(closedIcon);cellRenderer.setOpenIcon(openIcon);cellRenderer.setLeafIcon(leafIcon);tree.setCellRenderer(cellRenderer);其中,closedIcon和openIcon分别为树节点展开和关闭时枝节点的图标,就是你图中lib对应的图标;而leafIcon则为叶子节点的图标。

Java中有没有现成的树形结构的类
答:树时用来存储东西的,如果非要说类似的类,那么应该是treemap和treeset应该是使用的avl平衡二叉树实现的。其他的,好像暂时没有发现。正常算法使用的树,都是用的node里面存放引用来实现的。

Java中,Jtree的setShowsRootHandles(true)有什么实际用途?
答:true)的实际用途:设置 showsRootHandles 属性值,它指定是不是应显示节点句柄。此属性的默认值取决于用于创建 JTree 的构造方法。某些外观可能不支持句柄;将忽略此属性。这是java api中对这个方法的解释,具体的就是先不显示根(你添加到树中的root)所延伸出来的线条,默认是true。

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网