Cómo obtener la ruta del archivo haciendo doble clic en el nodo hoja en jtree
Primero, debe obtener el paquete XML Parser, que está disponible en: http://xml.apache.org/xerces2-j/index.html.
Luego diseñe una clase XMLTree, que herede la definición y las variables miembro de la clase JTree y tenga la siguiente definición de función:
clase pública XMLTree extends JTree{ private DefaultMutableTreeNode treeNode; / El nodo raíz de JTree private DocumentBuilderFactory dbf; // El analizador xml necesita estas tres variables miembro private DocumentBuilder db; private Document doc; // public void SaveToFile(DefaultMutableTreeNode root, FileWriter fw); El árbol se almacenará en un archivo XML private Node parseXml( String text ) }
El constructor que contiene completa el trabajo de inicialización.
El constructor realizará la siguiente inicialización:
XMLTree(String fileName){ dbf = DocumentBuilderFactory.newInstance() // Generar una instancia de dbf db = dbf.newDocumentBuilder(); ; // Generar una instancia de dbf db = dbf.newDocumentBuilder(); // Generar una instancia de dbf.newDocumentBuilder()newDocumentBuilder() // Generar una instancia de db treeNode = LoadFile( getXMLRoot( text ) ); Analiza el archivo xml y devuelve el nodo raíz de JTree setModel( new DefaultTreeModel( treeNode ) ); // Genera un JTree basado en el nodo raíz }
Entre ellos, getXMLRoot( text ) es un documento nuevo generador.
donde parseXml es un programa que devuelve el elemento raíz de un archivo XML, como se muestra a continuación:
nodo privado getXMLRoot( String text ){ ByteArrayInputStream byteStream byteStream = new ByteArrayInputStream( text; .getBytes( )); //Lee el archivo XML en la secuencia try{ doc = db.parse( byteStream );
} catch (Exception e) { e.printStackTrace(); return (Node)doc.getDocumentElement(); //devuelve el elemento raíz del árbol DOM para este archivo XML }
DocumentElement es un XML El elemento raíz del archivo.
La parte central de LoadFile es un proceso recursivo, como se muestra a continuación:
private DefaultMutableTreeNode createTreeNode( Node root ){ DefaultMutableTreeNode treeNode = null // Definir el nodo raíz que se devolverá; String name = root.getNodeValue(); // Obtenga el NodeValue de este nodo treeNode = new DefaultMutableTreeNode( root.getNodeType () == Node.TEXT_NODE ? value: name // Si es un nodo de valor, obtenga el valor); del nodo; de lo contrario, obtiene el nombre de la etiqueta del nodo if ( root.hasChildNodes() )// getChildNodes() // Obtiene la lista de nodos secundarios para este nodo if ( Children ! = null ){ // determina si el nodo secundario es nulo int numChildren = Children.getLength(); // Obtiene el número de bytes para (int i=0; i lt; numChildren; i ){ Node node = Children.item(i); procesar cada Nodo secundario if( node != null ){ NodeList niños = root.getChildNodes() // Obtener la lista de nodos secundarios del nodo if( Children ! Node if( node ! = null ) { if( node.getNodeType() = = Node. ELEMENT_NODE ) { treeNode.add( createTreeNode(node) ); // Si el nodo secundario tiene nodos secundarios, use la recursividad para procesar el nodo secundario } else { String data = node.getNodeValue(i); ; numChildren; i { node.getNodeValue(i); i; i lt; i { node.getNodeValue(i)getNodeValue(i); // recorre cada nodo secundario if( node ! node.getNodeValue(); ( datos ! = nulo ) { datos = datos.trim(); if ( !data.equals("\n") amp; !data.equals("\r\n") amp; ! amp; data.length( ) gt; 0 ){ treeNode.add(new DefaultMutableTreeNode(node.getNodeValue())); // Si el nodo no tiene hijos, entonces
se agrega directamente debajo del nodo } } } } } } } } } } } } } } } } } }}}}}}}}}}}}}}}}}}}}}}}}}}}}} }}}}}}}}}}}}}//return node }
Es muy sencillo realizar cambios en JTree utilizando los métodos del paquete de software Java Swing. Puedes utilizar cualquiera de ellos. el método del cuadro de diálogo emergente o realice cambios en el JTree directamente. En resumen, al realizar cambios en JTree, debe volver a escribir el archivo. Escribir el JTree en el archivo XML es un proceso recursivo. El método es el siguiente:
public void SaveToFile(DefaultMutableTreeNode, FileWriter. fw) {try { if (root.isLeaf()) fw.write( root.toString() "\r\n" // Si es un nodo hoja, envíe el nodo directamente al archivo else { // Si no es un nodo hoja, recurse Nodo de salida fw.write( "lt;"/r\n"); // Si es un nodo hoja, envíe el nodo directamente al archivo else { // Si no lo es un nodo hoja, genera el nodo de forma recursiva write( "lt; " root.toString() "gt;\r\n" for (int i=0; i lt; root.getChildCount(); i ) { DefaultMutableTreeNode childNode =(DefaultMutableTreeNode) root.getChildAt(i); i ) { DefaultMutableTreeNode childNode =(DefaultMutableTreeNode) root.getChildAt(i); getChildAt(i); nodo} fw.write( "lt;/" root.toString () "gt;\r\n"); }}} catch (Excepción e) { e.printStackTrace(); > Debe tenerse en cuenta que si el archivo XML contiene chino, antes de llamar a la función anterior, debe ingresar la codificación del archivo XML en el archivo de la siguiente manera:
fw.write("lt ;?xml version="1.0 " encoding="GB2312"? gt;\r \n");
Al finalizar la llamada a esta función, el archivo también debe cerrarse de la siguiente manera:
fw.close()