Red de conocimiento informático - Aprendizaje de programación - Cómo obtener la ruta del archivo haciendo doble clic en el nodo hoja en jtree

Cómo obtener la ruta del archivo haciendo doble clic en el nodo hoja en jtree

Una clase que lee y escribe archivos XML

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()