public class DefaultMutableTreeNode extends Object implements Cloneable, MutableTreeNode, Serializable
DefaultMutableTreeNodeは、ツリー・データ構造の汎用ノードです。デフォルトの可変ツリー・ノードの使用例は、「The Java Tutorial」の「How to Use Trees」を参照してください。
ツリー・ノードは最大1つの親と、ゼロ個以上の子を持ちます。DefaultMutableTreeNodeは、ノードの親と子の検査と変更を行うための操作と、そのノードによって構成されるツリーを検査する操作を提供します。ノードのツリーは、そのノードを起点とする親と子へのすべての可能なリンクをたどって到達できる、すべてのノードから構成されます。親を持たないノードはそのツリーのルートで、子を持たないノードは葉です。ツリーは多数のサブツリーを持つことができ、各ノードはそのサブツリーのルートになります。
このクラスは、ツリーまたはサブツリーをさまざまな順序で効率的にたどる方法や、2つのノード間のパスをたどるための方法を列挙します。DefaultMutableTreeNodeには、ユーザー・オブジェクトへの参照、つまりユーザーが独自に定義するオブジェクトへの参照も格納できます。DefaultMutableTreeNodeにtoString()を指定してその文字列表現を要求すると、そのユーザー・オブジェクトの文字列表現を返します。
このクラスはスレッド・セーフではありません。複数のスレッドでDefaultMutableTreeNode (つまり、TreeNodeのツリー)を使用する場合、ユーザー自身が同期を行う必要があります。慣例では、ツリーのルート・ノードで同期させます。
DefaultMutableTreeNodeはMutableTreeNodeインタフェースを実装し、MutableTreeNodeのあらゆる実装にメソッドを追加できますが、DefaultMutableTreeNodeのすべてのメソッドがMutableTreeNodeのすべての実装に適用できるとは限りません。提供される列挙の一部では特に、そうしたメソッドの一部を使用すると、DefaultMutableTreeNodeはDefaultMutableNodeのインスタンスだけを含む場合があります。TreeNode/MutableTreeNodeメソッドはすべて、どの実装が追加されても定義されたように動作します。
警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースとの互換性がなくなる予定です。現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。1.4以降、すべてのJavaBeans(tm)用の長期間の格納サポートがjava.beansパッケージに追加されています。XMLEncoderを参照してください。
MutableTreeNode| 修飾子と型 | フィールドと説明 |
|---|---|
protected boolean |
allowsChildren
ノードが子を持つことができる場合はtrueです。
|
protected Vector |
children
複数の子の配列です。このノードに子がない場合はnullです。
|
static Enumeration<TreeNode> |
EMPTY_ENUMERATION
常に空の列挙です。
|
protected MutableTreeNode |
parent
このノードの親です。このノードに親がない場合はnullです。
|
protected Object |
userObject
オプションのユーザー・オブジェクトです。
|
| コンストラクタと説明 |
|---|
DefaultMutableTreeNode()
親も子も持たないツリー・ノードを作成します。このツリー・ノードは子を持つことができます。
|
DefaultMutableTreeNode(Object userObject)
親も子も持たないツリー・ノードを作成し、指定されたユーザー・オブジェクトで初期化します。このツリー・ノードは子を持つことができます。
|
DefaultMutableTreeNode(Object userObject, boolean allowsChildren)
親も子もないツリー・ノードを作成します。これは、指定されたユーザー・オブジェクトで初期化され、指定された場合にかぎり子を持つことができます。
|
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
add(MutableTreeNode newChild)
newChildをその親から削除し、このノードの子配列の末尾に追加して、このノードの子にします。 |
Enumeration |
breadthFirstEnumeration()
このノードをルートにするサブツリーを幅優先でトラバースする列挙を生成して返します。
|
Enumeration |
children()
このノードの子の順方向列挙を作成して返します。
|
Object |
clone()
オーバーライドされて、複製をpublicにします。
|
Enumeration |
depthFirstEnumeration()
このノードをルートにするサブツリーを、深さ優先でトラバースする列挙を生成して返します。
|
boolean |
getAllowsChildren()
このノードが子を持つことを許可されている場合にtrueを返します。
|
TreeNode |
getChildAfter(TreeNode aChild)
このノードの子配列内で
aChildの直後にくる子を返します。なお、aChildはこのノードの子である必要があります。 |
TreeNode |
getChildAt(int index)
このノードの子配列にある、指定されたインデックスの子を返します。
|
TreeNode |
getChildBefore(TreeNode aChild)
このノードの子配列内で
aChildの直前にくる子を返します。なお、aChildはこのノードの子である必要があります。 |
int |
getChildCount()
このノードの子の数を返します。
|
int |
getDepth()
このノードをルートにするツリーの深さ、つまりこのノードから葉までの最長の距離を返します。
|
TreeNode |
getFirstChild()
このノードの最初の子を返します。
|
DefaultMutableTreeNode |
getFirstLeaf()
このノードの下位ノードである最初の葉、つまり、このノード、またはその最初の子の最初の葉のどちらかを見つけて返します。
|
int |
getIndex(TreeNode aChild)
このノードの子配列にある、指定された子のインデックスを返します。
|
TreeNode |
getLastChild()
このノードの最後の子を返します。
|
DefaultMutableTreeNode |
getLastLeaf()
このノードの下位ノードである最後の葉、つまり、このノード、またはその最後の子の最後の葉のどちらかを見つけて返します。
|
int |
getLeafCount()
このノードの下位ノードである葉の合計数を返します。
|
int |
getLevel()
このノードより上の部分のレベル数、つまりルートからこのノードまでの距離を返します。
|
DefaultMutableTreeNode |
getNextLeaf()
このノードの後ろの葉を返します。このノードがツリー内の最後の葉である場合はnullを返します。
|
DefaultMutableTreeNode |
getNextNode()
このノードのツリーの前順走査でこのノードの次にあるノードを返します。
|
DefaultMutableTreeNode |
getNextSibling()
親の子配列にあるこのノードの次の兄弟を返します。
|
TreeNode |
getParent()
このノードの親を返します。このノードに親がない場合はnullを返します。
|
TreeNode[] |
getPath()
ルートからこのノードに至るまでのパスを返します。
|
protected TreeNode[] |
getPathToRoot(TreeNode aNode, int depth)
ルート・ノードまでを含むノードの親を構築します。ただし、元のノードは返される配列内の最後の要素です。
|
DefaultMutableTreeNode |
getPreviousLeaf()
このノードの前の葉を返します。このノードがツリー内の最初の葉である場合はnullを返します。
|
DefaultMutableTreeNode |
getPreviousNode()
このノードのツリーの前順走査でこのノードの前にあるノードを返します。
|
DefaultMutableTreeNode |
getPreviousSibling()
親の子配列にあるこのノードの直前の兄弟を返します。
|
TreeNode |
getRoot()
このノードを格納するツリーのルートを返します。
|
TreeNode |
getSharedAncestor(DefaultMutableTreeNode aNode)
このノードと
aNodeにもっとも近い共通の上位ノードを返します。 |
int |
getSiblingCount()
このノードの兄弟数を返します。
|
Object |
getUserObject()
このノードのユーザー・オブジェクトを返します。
|
Object[] |
getUserObjectPath()
ルートからこのノードに至るユーザー・オブジェクト・パスを返します。
|
void |
insert(MutableTreeNode newChild, int childIndex)
newChildをその親があればその親から削除し、子の親をこのノードに設定してから、子をこのノードの子配列のインデックスchildIndexに追加します。 |
boolean |
isLeaf()
このノードに子がない場合はtrueを返します。
|
boolean |
isNodeAncestor(TreeNode anotherNode)
anotherNodeがこのノードの上位ノードである場合、つまり、このノード、このノードの親、またはこのノードの親の上位ノードである場合にtrueを返します。 |
boolean |
isNodeChild(TreeNode aNode)
aNodeがこのノードの子である場合はtrueを返します。 |
boolean |
isNodeDescendant(DefaultMutableTreeNode anotherNode)
anotherNodeがこのノードの下位ノードである場合、つまり、このノード、このノードの複数の子の中の1つ、またはその複数の子の中の1つの下位ノードである場合にtrueを返します。 |
boolean |
isNodeRelated(DefaultMutableTreeNode aNode)
aNodeがこのノードと同じツリーにある場合にtrueを返します。 |
boolean |
isNodeSibling(TreeNode anotherNode)
anotherNodeがこのノードと同じ親を持つ兄弟である場合はtrueを返します。 |
boolean |
isRoot()
このノードがツリーのルートの場合はtrueを返します。
|
Enumeration |
pathFromAncestorEnumeration(TreeNode ancestor)
ancestorからこのノードまでのパスをたどる列挙を生成して返します。 |
Enumeration |
postorderEnumeration()
このノードをルートにするサブツリーを後順でトラバースする列挙を生成して返します。
|
Enumeration |
preorderEnumeration()
このノードをルートにするサブツリーを前順でトラバースする列挙を生成して返します。
|
void |
remove(int childIndex)
このノードの複数の子から、指定されたインデックスの子を削除し、そのノードの親をnullに設定します。
|
void |
remove(MutableTreeNode aChild)
aChildをこのノードの子配列から削除し、それにnullの親を与えます。 |
void |
removeAllChildren()
このノードの子をすべて削除し、それらの親をnullに設定します。
|
void |
removeFromParent()
このノードをルートにするサブツリーをツリーから削除し、このノードにnullの親を与えます。
|
void |
setAllowsChildren(boolean allows)
このノードが子を持つことを許可されるかどうかを設定します。
|
void |
setParent(MutableTreeNode newParent)
このノードの親を
newParentに設定しますが、親の子配列は変更しません。 |
void |
setUserObject(Object userObject)
このノードのユーザー・オブジェクトを
userObjectに設定します。 |
String |
toString()
toString()をこのノードのユーザー・オブジェクトに送った結果を返します。このノードにユーザー・オブジェクトがない場合は空の文字列を返します。 |
public static final Enumeration<TreeNode> EMPTY_ENUMERATION
protected MutableTreeNode parent
protected Vector children
protected transient Object userObject
protected boolean allowsChildren
public DefaultMutableTreeNode()
public DefaultMutableTreeNode(Object userObject)
userObject - ユーザーが提供する、ノードのデータを構成するObjectpublic DefaultMutableTreeNode(Object userObject, boolean allowsChildren)
userObject - ユーザーが提供する、ノードのデータを構成するObjectallowsChildren - trueの場合、ノードは子ノードを持つことを許可される。そうでない場合、常に葉ノードpublic void insert(MutableTreeNode newChild, int childIndex)
newChildをその親があればその親から削除し、子の親をこのノードに設定してから、子をこのノードの子配列のインデックスchildIndexに追加します。newChildはnull、およびこのノードの上位ノードにすることはできません。insert、インタフェース: MutableTreeNodenewChild - このノードより下位の部分に挿入するMutableTreeNodechildIndex - このノードの挿入先である、このノードの子配列のインデックスArrayIndexOutOfBoundsException - childIndexが範囲外にある場合IllegalArgumentException - newChildがnullの場合、またはこのノードの上位ノードである場合IllegalStateException - このノードが子を許可しない場合isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)public void remove(int childIndex)
MutableTreeNodeでなければいけません。remove、インタフェース: MutableTreeNodechildIndex - このノードの子配列で削除する対象の子のインデックスArrayIndexOutOfBoundsException - childIndexが範囲外にある場合public void setParent(MutableTreeNode newParent)
newParentに設定しますが、親の子配列は変更しません。このメソッドは子の親を再び割り当てるために、insert()とremove()から呼び出されます。他のメソッドからメッセージとして送られることはありません。setParent、インタフェース: MutableTreeNodenewParent - このノードの新しい親public TreeNode getParent()
public TreeNode getChildAt(int index)
getChildAt、インタフェース: TreeNodeindex - このノードの子配列のインデックスArrayIndexOutOfBoundsException - indexが範囲外にある場合public int getChildCount()
getChildCount、インタフェース: TreeNodepublic int getIndex(TreeNode aChild)
-1を返します。このメソッドは線形探索を実行し、O(n)です。ここでnは子の数です。getIndex、インタフェース: TreeNodeaChild - このノードの複数の子の中から検索するTreeNode-1IllegalArgumentException - aChildがnullである場合public Enumeration children()
public void setAllowsChildren(boolean allows)
allowsがfalseの場合は、このノードの子はすべて削除されます。
注: デフォルトでは、ノードは子を許可します。
allows - このノードが子を持つことを許可される場合はtruepublic boolean getAllowsChildren()
getAllowsChildren、インタフェース: TreeNodepublic void setUserObject(Object userObject)
userObjectに設定します。setUserObject、インタフェース: MutableTreeNodeuserObject - このノードのユーザー指定のデータを構成するObjectgetUserObject(), toString()public Object getUserObject()
setUserObject(java.lang.Object), toString()public void removeFromParent()
removeFromParent、インタフェース: MutableTreeNodepublic void remove(MutableTreeNode aChild)
aChildをこのノードの子配列から削除し、それにnullの親を与えます。remove、インタフェース: MutableTreeNodeaChild - 削除するこのノードの子IllegalArgumentException - aChildがnullの場合、またはこのノードの子でない場合public void removeAllChildren()
public void add(MutableTreeNode newChild)
newChildをその親から削除し、このノードの子配列の末尾に追加して、このノードの子にします。newChild - このノードの子として追加するノードIllegalArgumentException - newChildがnullである場合IllegalStateException - このノードが子を許可しない場合insert(javax.swing.tree.MutableTreeNode, int)public boolean isNodeAncestor(TreeNode anotherNode)
anotherNodeがこのノードの上位ノードである場合、つまり、このノード、このノードの親、またはこのノードの親の上位ノードである場合にtrueを返します。(ノードはそれ自身の上位ノードと見なされることに注意してください。)anotherNodeがnullの場合、このメソッドはfalseを返します。この操作は最低でもO(h)です。hはルートからこのノードまでの距離です。anotherNode - このノードの上位ノードであるかどうかを調べるノードanotherNodeの下位ノードである場合はtrueisNodeDescendant(javax.swing.tree.DefaultMutableTreeNode), getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)public boolean isNodeDescendant(DefaultMutableTreeNode anotherNode)
anotherNodeがこのノードの下位ノードである場合、つまり、このノード、このノードの複数の子の中の1つ、またはその複数の子の中の1つの下位ノードである場合にtrueを返します。ノードはそれ自身の下位ノードと見なされます。anotherNodeがnullの場合、falseを返します。この操作は最低でもO(h)です。hはルートからanotherNodeまでの距離です。anotherNode - このノードの下位ノードであるかどうかを調べるノードanotherNodeの上位ノードである場合はtrueisNodeAncestor(javax.swing.tree.TreeNode), getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)public TreeNode getSharedAncestor(DefaultMutableTreeNode aNode)
aNodeにもっとも近い共通の上位ノードを返します。そのような上位ノードがない場合、つまりこのノードとaNodeが異なるツリーにある場合や、aNodeがnullの場合は、nullを返します。ノードはそれ自身の上位ノードと見なされます。aNode - 共通の上位ノードを見つけるノードaNodeにもっとも近い共通の上位ノード。ない場合はnullisNodeAncestor(javax.swing.tree.TreeNode), isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)public boolean isNodeRelated(DefaultMutableTreeNode aNode)
aNodeがこのノードと同じツリーにある場合にtrueを返します。aNodeがnullの場合、falseを返します。aNodeがこのノードと同じツリーにある場合はtrue、aNodeがnullの場合はfalsegetSharedAncestor(javax.swing.tree.DefaultMutableTreeNode), getRoot()public int getDepth()
getLevel()よりもかなり負荷が大きくなります。getLevel()public int getLevel()
getDepth()public TreeNode[] getPath()
protected TreeNode[] getPathToRoot(TreeNode aNode, int depth)
aNode - パスを取得するTreeNodedepth - 返される配列のサイズ指定に使用する、(再帰呼出しで)すでに取得済みのルートまでのステップ数を示すint値public Object[] getUserObjectPath()
public TreeNode getRoot()
isNodeAncestor(javax.swing.tree.TreeNode)public boolean isRoot()
public DefaultMutableTreeNode getNextNode()
preorderEnumeration()public DefaultMutableTreeNode getPreviousNode()
nullを返します。これはツリー全体をトラバースする方法としては効率的ではないので、代わりに列挙を使用します。preorderEnumeration()public Enumeration preorderEnumeration()
nextElement()メソッドによって返される最初のノードは、このノードです。ノードの挿入、削除、移動でツリーを変更すると、変更前に作成された任意の列挙は無効になります。
postorderEnumeration()public Enumeration postorderEnumeration()
nextElement()メソッドによって返される最初のノードは、左端の葉です。これは、深さ優先走査と同じです。ノードの挿入、削除、移動でツリーを変更すると、変更前に作成された任意の列挙は無効になります。
depthFirstEnumeration(), preorderEnumeration()public Enumeration breadthFirstEnumeration()
nextElement()メソッドによって返される最初のノードは、このノードです。ノードの挿入、削除、移動でツリーを変更すると、変更前に作成された任意の列挙は無効になります。
depthFirstEnumeration()public Enumeration depthFirstEnumeration()
nextElement()メソッドによって返される最初のノードは、左端の葉です。これは、ポストオーダー探索と同じです。ノードの挿入、削除、移動でツリーを変更すると、変更前に作成された任意の列挙は無効になります。
breadthFirstEnumeration(), postorderEnumeration()public Enumeration pathFromAncestorEnumeration(TreeNode ancestor)
ancestorからこのノードまでのパスをたどる列挙を生成して返します。列挙のnextElement()メソッドは、最初にancestor、次にこのノードの上位ノードであるancestorの子というように順次返していき、最後にこのノードを返します。列挙の生成はO(m)です。mはこのノードとancestorの間(このノードとancestorを含む)のノード数です。各nextElement()メッセージはO(1)です。ノードの挿入、削除、移動でツリーを変更すると、変更前に作成された任意の列挙は無効になります。
IllegalArgumentException - ancestorがこのノードの上位ノードでない場合isNodeAncestor(javax.swing.tree.TreeNode), isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)public boolean isNodeChild(TreeNode aNode)
aNodeがこのノードの子である場合はtrueを返します。aNodeがnullの場合、このメソッドはfalseを返します。aNodeがこのノードの子である場合はtrue。aNodeがnullの場合はfalsepublic TreeNode getFirstChild()
NoSuchElementException - このノードに子がない場合public TreeNode getLastChild()
NoSuchElementException - このノードに子がない場合public TreeNode getChildAfter(TreeNode aChild)
aChildの直後にくる子を返します。なお、aChildはこのノードの子である必要があります。aChildが最後の子の場合は、nullを返します。このメソッドは、このノードの子のO(n)の線形探索を実行してaChildを探します。nは子の数です。子の配列全体をトラバースするには、代わりに列挙を使用します。aChildの直後にくるこのノードの子IllegalArgumentException - aChildがnullの場合、またはこのノードの子でない場合childrenpublic TreeNode getChildBefore(TreeNode aChild)
aChildの直前にくる子を返します。なお、aChildはこのノードの子である必要があります。aChildが最初の子の場合、nullを返します。このメソッドは、このノードの子のO(n)の線形探索を実行してaChildを探します。nは子の数です。aChildの直前にくるこのノードの子IllegalArgumentException - aChildがnullの場合、またはこのノードの子でない場合public boolean isNodeSibling(TreeNode anotherNode)
anotherNodeがこのノードと同じ親を持つ兄弟である場合はtrueを返します。ノードはそれ自身の兄弟です。anotherNodeがnullの場合、falseを返します。anotherNode - このノードの兄弟であるかどうかを調べるノードanotherNodeがこのノードの兄弟の場合はtruepublic int getSiblingCount()
1を返します。public DefaultMutableTreeNode getNextSibling()
childrenpublic DefaultMutableTreeNode getPreviousSibling()
public boolean isLeaf()
getAllowsChildrenと組み合わせて使用します。isLeaf、インタフェース: TreeNodegetAllowsChildren()public DefaultMutableTreeNode getFirstLeaf()
isLeaf(), isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)public DefaultMutableTreeNode getLastLeaf()
isLeaf(), isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)public DefaultMutableTreeNode getNextLeaf()
MutableNodeインタフェースのこの実装では、この操作はあまり効率的ではありません。次のノードを判定するには、このメソッドは最初に現在のノードを見つけるために親の子リストで線形探索を実行します。
この実装は、操作を既知の位置から短いトラバーサルを行うのに適したものにします。ツリー内のすべての葉をトラバースするには、depthFirstEnumerationを使用してツリー内のノードを列挙し、isLeafを各ノードに使用してどれが葉であるかを判定します。
depthFirstEnumeration(), isLeaf()public DefaultMutableTreeNode getPreviousLeaf()
MutableNodeインタフェースのこの実装では、この操作はあまり効率的ではありません。直前のノードを判定するには、このメソッドは最初に現在のノードを見つけるために親の子リストで線形探索を実行します。
この実装は、操作を既知の位置から短いトラバーサルを行うのに適したものにします。ツリー内のすべての葉をトラバースするには、depthFirstEnumerationを使用してツリー内のノードを列挙し、isLeafを各ノードに使用してどれが葉であるかを判定します。
depthFirstEnumeration(), isLeaf()public int getLeafCount()
1を返します。このメソッドはO(n)です。nはこのノードの下位ノードの数です。isNodeAncestor(javax.swing.tree.TreeNode)public String toString()
toString()をこのノードのユーザー・オブジェクトに送った結果を返します。このノードにユーザー・オブジェクトがない場合は空の文字列を返します。toString、クラス: ObjectgetUserObject() バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.