ホームページ  >  記事  >  Java  >  Java Swing を使用して XML エディタを作成する (1)

Java Swing を使用して XML エディタを作成する (1)

黄舟
黄舟オリジナル
2016-12-20 13:39:452170ブラウズ

XML についてはある程度の理解が必要だと思いますが、XML テキストを書きたいと思っている方もいると思いますが、現在利用できるクロスプラットフォームの無料 XML エディターはあまりにも少ないです。したがって、この記事では、単純な XML エディターを開発する方法を段階的に説明したいと思います。もちろん、最も一般的な Java 2 Swing コンポーネントのいくつかを使用する必要がありますが、これらは無料であり、一部は JDK に含まれています。 . 一部はインターネットからダウンロードできます。この記事を通じて、独自の XML エディターを作成できるようになると思います。


まずこの記事を書くにあたっての考え方を紹介します。まず、XML と、XML の表示にツリー構造が適している理由について簡単に説明します。次に、JAXP API が必要な XML クラス環境を設定する方法について説明します。次に、Swing コンポーネントを表示するための JTree について説明します。 ; 最後に、JTree コンポーネントを継承し、XML ドキュメントを解析して Jtree にデータを表示するために使用できる再利用可能なクラスを作成します。

XML (eXtensible Markup Languge) というと、Html や CSS と同じように、Web ブラウザーで使用される新しいマークアップ言語として考えられがちです。実際、XML は、非常に効率的な方法でデータを記述することを可能にするデータ表現言語です。 XML を使用すると、「これら 3 つの単語が見出しを構成する」などのステートメントを定義できます。 XML を使用すると、Web ページにデータを表示するのではなく、あらゆるタイプのデータを宣言できます。

次の XML の例をご覧ください:



Java Swing を使用して XML エディタを作成する <br><subtitle> Part 1</subtitle><br>
<header>
<content> これは本文です</content>
</article>

これらの要素は標準の HTML ステートメントとは異なりますが、見た目は HTML に近いことに注意してください。 XML と HTML は両方とも SGML 言語から派生したものであるためです。違いは、HTML には事前定義されたタグのセットがあるのに対し、XML の構文には柔軟性があり、 などの表意文字タグを使用してデータを囲むことができることです。また、すべての要素はルート要素 (上の例では
) に属し、一部の要素には独自のサブ要素 ( のサブ要素である <subtitle> など) があることにも注意してください。このデータの編成方法には 3 つの利点があります。データの表現力が向上し、データの管理が容易になり、データをツリー構造として表示しやすくなります。これが、XML データの表示に JTree オブジェクトを使用する理由です。 XML についてさらに深く理解したい場合は、Tianji.com の関連チュートリアルを参照してください。 <br><br> JAXP は XML を処理するための Java API であり、アプリケーションが XML ドキュメントを分析および変換できるようにします。その機能は関数をメソッドに抽象化する JDBC API に似ています。 Apache Web サイトにアクセスして、最新の JAXP を含む最新の Xerces アナライザーを見つけてください。ダウンロード後、クラス ディレクトリに置きます。 <br><br>JTree Swing コンポーネントの使用方法を見てみましょう。 <br><br> 自然界では、通常、木には非常に太い幹があり、多くの枝が枝分かれしていることは誰もが知っています。木の各枝と枝の間には、すべて同じ源である幹があるため、一定のつながりがあります。この継続的な関係は枝に限定されるものではなく、人間の系図も同じパターンに従います。親から子へ、子の子へ、数えきれないほど続きます。同様に、データ ストレージにおいて、ツリーの概念は、人間の家系図と同じ方法でデータを保存する方法です。ツリーの各ブランチはノードと呼ばれ、子ノードを持つ各ノードは親ノードと呼ばれ、すべての子ノードに共通の親ノードはルート ノードと呼ばれます。 JTree コンポーネントは、ツリー データ構造を単純に視覚的に表現したものです。 <br><br> ほとんどすべての XML エディターには、XML ドキュメント内の要素を編集できる視覚的なツリー構造が含まれています。すぐにエディターを構築しますが、その前に、JTree コンポーネントを見てみましょう。ノードはツリー内の特定の場所にデータを保存します。データを保存するには、親ノードとその子ノードがわかっている必要があります。 javax.swing.tree パッケージは、ツリー構造を構築および操作するための共通の方法を提供する、いくつかの非常に便利なインターフェイスを定義します。 <br><br> TreeNodeメソッドは、ツリーノード情報にアクセスするために使用されます<br><br> MutableTreeNodeメソッドは、可変ツリーで使用されます(子ノードを追加または削除できます)<br><br> TreeModelメソッドは、ツリー関連のデータモデルを作成および管理するために使用されます。 <br><br> 次に、JTree を継承し、ビジュアルな JTree コンポーネントを使用して XML ドキュメントを解析し、ノードを表示する機能を提供するクラスを作成します。 <br><br> XTreeコンポーネントの作成<br><br> 簡素化のため、コンポーネントはXtreeを構築することしかできず、ツリーの作成後にそのノードを処理することはできません。このクラスを見てみましょう。 <br><br> Field:<br><br> PRivate DefaultMutableTreeNode TreeNode このメンバー変数には、JTree モデルを格納するために使用される TreeNode オブジェクトが格納されます。 <br><br>DefaultMutableTreeNode クラスは javax.swing.tree で定義され、デフォルトで MutableTreeNode インターフェースの実装を提供します。 <br><br> private DocumentBuilderFactory dbf<br><br> private DocumentBuilder db<br><br> private Document doc これら 3 つのメンバー変数は JAXP の一部であり、XML テキストを分析して DOM (Document Object Model) オブジェクトに変換するために使用されます。 <br><br> Constructor<br><br> public XTree(String text)<br><br> このコンストラクターは、コンストラクターに渡されたXMLテキストを使用してXTreeオブジェクトを作成します。 JTree スーパークラスと DOM 分析オブジェクトに関連するいくつかの基本的な表示プロパティを初期化した後、コンストラクターは実際のビジュアル ツリーの作成に使用される TreeModel オブジェクトを生成します。 DOM オブジェクトを createTreeNode() メソッドに渡すことによって、ルート ノードを作成します。createTreeNode() メソッドは、DefaultMutableTreeNode 型のオブジェクトを返します。このオブジェクトは、ツリーの TreeModel を作成するために使用されます。 <br><br> メソッド<br><br> private DefaultMutableTreeNode createTreeNode(Node root)<br><br> このメソッドは DOM ノードを取得し、すべてのノードが DefaultMutableTreeNode に追加されるまで子ノードを再帰的に処理します。これは再帰的なメソッドであり、ルート ノードの下にあるすべての子ノードを見つけるために、毎回自分自身を呼び出します。 JTree は、すでにツリーになっている DefaultMutableTreeNode オブジェクトを使用できます。 <br><br> private String getNodeType(Node node)<br><br> このメソッドは、文字列を特定のタイプのノードに関連付けるために createTreeNode() によって使用されます。 <br><br> private Node parseXml()<br><br> このメソッドは、XML テキスト文字列を解析するために使用され、Node 型のオブジェクトを返し、createTreeNode() メソッドに渡すことができます。 <br><br>誰もが分析して研究できるように、以下の Java コードを提供しました。 <br><br>// W3C の DOM クラスを入力します<br>import org.w3c.dom.*;<br>// DOM I/O 用の JAXP のクラス<br>import javax.xml.parsers.*;<br>// 標準 Java クラス<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 <br> /**<br>* このメンバー変数には、JTree モデルを格納するために使用される TreeNode オブジェクトが格納されます。 <br>*DefaultMutableTreeNode クラスは javax.swing.tree で定義されます<br>*MutableTreeNode インターフェースの実装はデフォルトで提供されます。 <br>*/<br><br>public ( true );<br>setEditable( false ); // ツリーを編集可能にします<br><br> // DOM を初期化してオブジェクトを分析します <br>dbf = DocumentBuilderFactory.newInstance() ;<br>dbf.setValidating( false );<br>db = dbf. newDocumentBuilder();<br><br>// DOM ルート ノードを取得して JTree ツリー モデルに変換します<br>treeNode = createTreeNode( parseXml( text ) );<br>setModel( new DefaultTreeModel(treeNode ) );<br>} file://Abort XTree ()<br><br> /**<br>* これら 3 つのメンバー変数は JAXP の一部であり、XML テキストを分析して DOM (Document Object Model) オブジェクトに変換するために使用されます。 <br>*/<br><br>private DefaultMutableTreeNode createTreeNode( Node root )<br>{<br>DefaultMutableTreeNode TreeNode = null;<br>文字列型、名前、値;<br>NamedNodeMap attribs;<br>Node attribNode;<br><br>// from ルートノードからデータを取得します <br>type = getNodeType( root ); <br>name = root.getNodeName(); <br><br>treeNode = new DefaultMutableTreeNode( root.getNodeType() == Node.TEXT_NODE ? value : name );<br><br>//属性の表示<br>attribs = root.getAttributes();<br>if( attribs != null )<br>{<br>for( int i = 0; i {<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( "[属性] --> " + 名前 + "="" + 値 + """ ) );<br>} file://end if ( value.length() > 0 )<br>} file://end if ( value != null )<br>} file://end for( int i = 0; i } file://end if( attribs != null ) <br><br>// 子ノードがある場合は再帰 <br>if( root.hasChildNodes() )<br>{<br>NodeList Children;<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 {<br>node = 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(" </subtitle>

上記は Java Swing を使用した XML エディターの作成 (1) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.ん)!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。