Heim >Java >javaLernprogramm >Erstellen Sie einen XML-Editor mit Java Swing (1)

Erstellen Sie einen XML-Editor mit Java Swing (1)

黄舟
黄舟Original
2016-12-20 13:39:452195Durchsuche

Ich denke, Sie müssen ein gewisses Verständnis für XML haben. Vielleicht möchten Sie immer noch einen XML-Text schreiben, aber es gibt derzeit zu wenige plattformübergreifende, kostenlose XML-Editoren. In diesem Artikel möchte ich Ihnen einen einfachen XML-Editor vorstellen oder ihn Schritt für Schritt entwickeln. Natürlich werden wir einige der gängigsten Java 2 Swing-Komponenten verwenden, aber diese sind alle kostenlos und einige sind im JDK enthalten , einige können aus dem Internet heruntergeladen werden. Ich denke, dass Sie durch diesen Artikel einen eigenen XML-Editor erstellen können.
 

Lassen Sie mich zunächst die Idee zum Schreiben dieses Artikels vorstellen. Zuerst möchte ich kurz auf XML eingehen und erklären, warum Baumstrukturen für die Darstellung von XML geeignet sind. Anschließend schauen wir uns an, wie die JAXP-API die erforderliche XML-Klassenumgebung einrichtet erstellen wir eine wiederverwendbare Klasse, die die JTree-Komponente fortsetzt und zum Parsen eines XML-Dokuments und zum Anzeigen der Daten in einem Jtree verwendet werden kann.

Wenn es um XML (eXtensible Markup Languge) geht, denken die Leute oft an eine neue Auszeichnungssprache, die in Webbrowsern verwendet wird, genau wie HTML oder CSS. Tatsächlich ist XML eine Datendarstellungssprache, mit der Sie Ihre Daten auf sehr effiziente Weise beschreiben können. Mit XML können Sie Aussagen wie „Diese drei Wörter bilden eine Überschrift“ definieren. Mit XML können Sie jede Art von Daten deklarieren, anstatt die Daten auf einer Webseite anzuzeigen.

Bitte schauen Sie sich das folgende XML-Beispiel an:

<article>
<header>
<title> Verwenden Sie Java Swing, um einen XML-Editor
<suBTitle zu erstellen > Teil Eins</Untertitel>
</Titel>
<Autor> Wayne </Autor>
<Kopfzeile>
<Inhalt> Dies ist der Text</Inhalt>
</ Artikel>

Bitte beachten Sie, dass sich diese Elemente von Standard-HTML-Anweisungen unterscheiden, aber eher wie HTML aussehen. Dies liegt daran, dass sowohl XML als auch HTML von der SGML-Sprache abgeleitet sind. Der Unterschied besteht darin, dass HTML über einen vordefinierten Satz von Tags verfügt, während die Syntax von XML sehr flexibel ist und es Ihnen ermöglicht, ideografische Tags wie zu verwenden, um die Daten zu umgeben. Sie sollten auch beachten, dass alle Elemente zum Stammelement gehören (

im obigen Beispiel) und einige Elemente ihre eigenen Unterelemente haben, wie z. B. , das ein Unterelement von ist. Diese Art der Datenorganisation hat drei Vorteile: Die Daten können aussagekräftiger sein, die Daten sind einfacher zu verwalten und die Daten lassen sich einfacher als Baumstruktur anzeigen. Aus diesem Grund verwenden wir JTree-Objekte, um XML-Daten anzuzeigen. Wenn Sie ein tieferes Verständnis von XML erlangen möchten, lesen Sie bitte die entsprechenden Tutorials auf Tianji.com. <br><br> JAXP ist eine Java-API zur Verarbeitung von XML. Sie ermöglicht Anwendungen die Analyse und Transformation von XML-Dokumenten. Ihre Funktion ähnelt der JDBC-API, die Funktionen in Methoden abstrahiert. Sie können auf der Apache-Website nach dem neuesten Xerces-Analysator suchen, der das neueste JAXP enthält. Legen Sie es nach dem Herunterladen in Ihr Klassenverzeichnis. <br><br>Sehen wir uns an, wie die JTree Swing-Komponente verwendet wird. <br><br> Wir alle wissen, dass ein Baum in der Natur normalerweise einen sehr dicken Stamm mit vielen verzweigten Ästen hat. Zwischen jedem Zweig und dem Zweig besteht eine gewisse Verbindung, da sie alle dieselbe Quelle haben: den Stamm. Diese fortdauernde Beziehung ist nicht auf Zweige beschränkt; die menschliche Genealogie folgt demselben Muster. Von den Eltern über die Kinder bis hin zu Kindeskindern und so weiter, bis wir den Überblick verlieren. Ebenso ist das Konzept eines Baums in der Datenspeicherung eine Möglichkeit, Daten auf die gleiche Weise wie ein menschlicher Stammbaum zu speichern. Jeder Zweig des Baums wird als Knoten bezeichnet, jeder Knoten mit untergeordneten Knoten wird als übergeordneter Knoten bezeichnet und der gemeinsame übergeordnete Knoten aller untergeordneten Knoten wird als Wurzelknoten bezeichnet. Eine JTree-Komponente ist eine visuelle Darstellung einer einfachen Baumdatenstruktur. <br><br> Fast alle XML-Editoren verfügen über eine visuelle Baumstruktur, mit der Sie Elemente in einem XML-Dokument bearbeiten können. Wir werden bald einen Editor erstellen, aber vorher werfen wir einen Blick auf die JTree-Komponente. Ein Knoten speichert Daten an einer bestimmten Stelle in einem Baum. Um Daten speichern zu können, müssen jeder übergeordnete Knoten und seine untergeordneten Knoten bekannt sein. Das Paket javax.swing.tree definiert einige sehr nützliche Schnittstellen und bietet eine gemeinsame Methode zum Aufbau und Betrieb einer Baumstruktur. <br><br> TreeNode-Methode, die für den Zugriff auf Baumknoteninformationen verwendet wird <br><br> MutableTreeNode-Methode wird für einen veränderlichen Baum verwendet (kann untergeordnete Knoten hinzufügen oder löschen) <br><br> TreeModel-Methode wird zum Erstellen und Verwenden verwendet Verwaltung baumbezogener Datenmodelle. <br><br> Als Nächstes erstellen wir eine Klasse, die JTree fortsetzt und Funktionen zum Parsen von XML-Dokumenten und zum Anzeigen von Knoten mithilfe visueller JTree-Komponenten bereitstellt. <br><br> XTree-Komponente erstellen <br><br> Die XTree-Klasse besteht aus einem Konstruktor und drei Methoden. Der Einfachheit halber kann unsere Komponente nur einen Xtree erstellen, seine Knoten jedoch nicht verarbeitet. Werfen wir einen Blick auf diese Klasse. <br><br> Domäne: <br><br> PRivate DefaultMutableTreeNode treeNode Diese Mitgliedsvariable speichert das TreeNode-Objekt, das zum Speichern des JTree-Modells verwendet wird. <br><br>Die DefaultMutableTreeNode-Klasse ist in javax.swing.tree definiert und stellt standardmäßig eine Implementierung der MutableTreeNode-Schnittstelle bereit. <br><br>private DocumentBuilderFactory dbf<br><br>private DocumentBuilder db<br><br>private Document doc Diese drei Mitgliedsvariablen sind Teil von JAXP und werden verwendet, um XML-Text zu analysieren und ihn in DOM (Document Object) zu konvertieren Modell) Objekt. <br><br> Konstruktor <br><br> public XTree( String text ) <br><br> Dieser Konstruktor erstellt ein XTree-Objekt unter Verwendung des an den Konstruktor übergebenen XML-Textes. Nach der Initialisierung einiger grundlegender Anzeigeeigenschaften im Zusammenhang mit der JTree-Superklasse und dem DOM-Analyseobjekt generiert der Konstruktor ein TreeModel-Objekt, das zum Erstellen eines tatsächlichen visuellen Baums verwendet wird. Erstellen Sie einen Wurzelknoten, indem Sie das DOM-Objekt an die Methode createTreeNode() übergeben. Die Methode createTreeNode() gibt ein Objekt vom Typ DefaultMutableTreeNode zurück. Dieses Objekt wird dann verwendet, um das TreeModel des Baums zu erstellen. <br><br> Methoden <br><br> private DefaultMutableTreeNode createTreeNode( Node root ) <br><br> Diese Methode nimmt einen DOM-Knoten und durchläuft dann die untergeordneten Knoten rekursiv, bis alle Knoten zum DefaultMutableTreeNode hinzugefügt wurden. Dies ist eine rekursive Methode. Um jeden untergeordneten Knoten unter dem Wurzelknoten zu finden, ruft sie sich jedes Mal selbst auf. JTree kann dann das DefaultMutableTreeNode-Objekt verwenden, da es bereits ein Baum ist. <br><br> private String getNodeType(Node node)<br><br>Diese Methode wird von createTreeNode() verwendet, um einen String einem bestimmten Knotentyp zuzuordnen. <br><br> private Node parseXml()<br><br>Diese Methode wird zum Parsen von XML-Textzeichenfolgen verwendet. Sie gibt ein Objekt vom Typ Node zurück, das an die Methode createTreeNode() übergeben werden kann. <br><br>Ich habe den folgenden Java-Code bereitgestellt, damit jeder ihn analysieren und studieren kann. <br><br>// Geben Sie die W3C-DOM-Klasse ein <br>import org.w3c.dom.*;<br>// JAXP-Klasse für DOM-E/A <br>import javax.xml.parsers .*;<br>// Standard-Java-Klasse<br>import javax.swing.*;<br>import javax.swing.tree.*;<br>import javax.swing.event.*;<br>import java .awt.* ;<br>import java.awt.event.*;<br>import java.io.*;<br>public class XTree erweitert JTree<br>{<br>/**<br>* Diese Mitgliedsvariable speichert das TreeNode-Objekt, das zum Speichern des JTree-Modells verwendet wird. <br>*Die DefaultMutableTreeNode-Klasse ist in javax.swing.tree definiert. <br>*Stellt standardmäßig eine Implementierung der MutableTreeNode-Schnittstelle bereit. <br>*/ <br>private DefaultMutableTreeNode treeNode;<br>/**<br>* Diese drei Mitgliedsvariablen sind Teil von JAXP und werden verwendet, um XML-Text zu analysieren und ihn in DOM-Objekte (Document Object Model) zu konvertieren. <br>*/<br>private DocumentBuilderFactory dbf;<br>private DocumentBuilder db;<br>private Document doc;<br><br> /**<br> * Dieser Konstruktor erstellt ein XTree-Objekt unter Verwendung des an den Konstruktor übergebenen XML-Textes <br><br> * @Parametertext ist ein XML-Text im XML-Format <br><br> * @Exception ParserConfigurationException, wenn konstruiert. Wenn der Wenn die Funktion den Analysator abnormal einstellt, wird eine Ausnahme ausgelöst <br><br>*/<br><br>public XTree( String text ) throws ParserConfigurationException<br>{<br>super();<br><br>// Legen Sie die grundlegenden Eigenschaften des Tree-Renderings fest<br>getSelectionModel().setSelectionMode (TreeSelectionModel. SINGLE_TREE_SELECTION);<br>setShowsRootHandles( true );<br>setEditable( false ); // Ermögliche die Bearbeitung des Baums<br><br>// Analysiere das Objekt durch Initialisierung des DOM des Objekts<br>dbf = DocumentBuilderFactory .newInstance();<br>dbf.setValidating( false );<br>db = dbf.newDocumentBuilder();<br><br>// Nehmen Sie den DOM-Wurzelknoten und konvertieren Sie ihn in ein JTree-Baummodell<br> treeNode = createTreeNode( parseXml( text ) );<br>setModel( new DefaultTreeModel( treeNode ) );<br>} file://abortXTree()<br><br> /**<br><br>  * Diese Methode nimmt einen DOM-Knoten und durchläuft dann rekursiv die untergeordneten Knoten, bis alle Kontakte zum DefaultMutableTreeNode hinzugefügt wurden. <br><br> * Dies ist eine rekursive Methode. Um jeden untergeordneten Knoten unter dem Wurzelknoten zu finden, muss er sich jedes Mal selbst aufrufen. <br><br>  * JTree kann dann das DefaultMutableTreeNode-Objekt verwenden, da es bereits ein Baum ist. <br><br> *<br><br> * @Parameter root org.w3c.Node.Node<br><br> ><br> */<br><br>private DefaultMutableTreeNode createTreeNode( Knotenstamm)<br>{<br>DefaultMutableTreeNode treeNode = null;<br>String-Typ, Name, Wert;<br>NamedNodeMap attribs;<br>Node attribNode;<br><br>//Daten vom Wurzelknoten abrufen<br>type = getNodeType( root );<br>name = root.getNodeName();<br>value = root.getNodeValue();<br><br>treeNode = new DefaultMutableTreeNode( root.getNodeType() == Node.TEXT_NODE ? value : name );<br><br>// Anzeigeattribute<br>attribs = root.getAttributes();<br>if( attribs != null )<br>{<br>for( int i = 0; i < attribs.getLength(); i++ )<br>{<br>attribNode = attribs.item(i);<br>name = attribNode.getNodeName(). trim();<br>value = attribNode.getNodeValue().trim();<br><br>if ( value != null )<br>{<br>if ( value.length() > 0 )<br>{<br>treeNode.add( new DefaultMutableTreeNode( "[Attribute] --> " + name + "="" + value + """ ) );<br>} file://end if ( value.length() > 0 ) <br>} file://end if ( value != null )<br>} file://end for( int i = 0; i < attribs.getLength(); i++ )<br>} file:// end if( attribs != null )<br><br>// 假如存在子节点,递归<br>if( root.hasChildNodes() )<br>{<br>NodeListchildren;<br>int numChildren;<br>Node node;<br>String data;<br><br>children = root.getChildNodes();<br>// 假如子节点非空的话,只递归<br>if(children != null )<br>{<br>numChildren = children.getLength();<br><br>for (int i=0; i < numChildren; i++)<br>{<br>node = children.item(i);<br>if( node != null )<br>{<br>if( node.getNodeType() == Node.ELEMENT_NODE )<br>{<br>treeNode.add( createTreeNode(node) );<br>} file://end if( node.getNodeType() == Node.ELEMENT_NODE )<br><br>data = node.getNodeValue();<br><br>if( data != null )<br>{<br>data = data.trim();<br>if ( !data.equals(" ") && !data.equals(" 

 以上就是使用Java Swing und XML编辑器(一)的内容,更多相关内容请关注PHP中文网(www.php.cn)! 


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn