|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.swing.tree.DefaultMutableTreeNode
public class DefaultMutableTreeNode
DefaultMutableTreeNode
是階層樹資料結構中的通用節點。有關使用預設可變階層樹節點的範例,請參閱 The Java Tutorial 中的 How to Use Trees 一節。
一個階層樹節點最多可以有一個父節點、0 或多個子節點。DefaultMutableTreeNode
為檢查和修改節點的父節點和子節點提供操作,也為檢查節點所屬的階層樹提供操作。節點的階層樹是所有節點的集合,通過從某一節點開始並沿著父節點和子節點的所有可能的連接,可以存取這些節點。不帶父節點的節點是階層樹的根;不帶子節點的節點是葉節點。階層樹可以由許多子階層樹組成,每個節點充當自已的子階層樹的根。
此類別提供按各種順序有效地遍歷階層樹或子階層樹,或者沿著兩節點間的路徑進行遍歷的列舉。DefaultMutableTreeNode
還可以保存對使用者物件的參考,使用者物件由使用者使用。通過 toString()
請求 DefaultMutableTreeNode
的字元串表示形式將返回其使用者物件的字元串表示形式。
這不是一個執行緒安全的類別。如果打算在多個執行緒中使用 DefaultMutableTreeNode(或 TreeNodes 的階層樹),則需要執行自己的同步。要採用的較好慣例是在階層樹的根節點上進行同步。
儘管 DefaultMutableTreeNode 實作 MutableTreeNode 介面,並允許您將其添加到 MutableTreeNode 的任何實作中,但是並不是 DefaultMutableTreeNode 中的所有方法都將適用於所有的 MutableTreeNodes 實作。特別是通過提供的一些列舉,使用其中一些方法,我們假定 DefaultMutableTreeNode 只包含 DefaultMutableNode 實例。無論添加什麼實作,所有的 TreeNode/MutableTreeNode 方法都將表現出定義的行為。
警告:此類別的已序列化物件與以後的 Swing 版本不相容。當前的序列化支持適用於短期存儲或運行相同 Swing 版本的應用程序之間的 RMI。從 1.4 版本開始,已在 java.beans
套件中添加了支持所有 JavaBeansTM 長期存儲的功能。請參見 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 之後的子節點,它必須是此節點的子節點。 |
TreeNode |
getChildAt(int index)
返回此節點的子節點陣列中指定索引處的子節點。 |
TreeNode |
getChildBefore(TreeNode 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 是此節點的後代 -- 如果它是此節點、此節點的一個子節點或此節點的一個子節點的後代,則返回 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)
通過向其提供一個 null 父節點,從此節點的子節點陣列移除 aChild 。 |
void |
removeAllChildren()
通過將其父節點設置為 null,移除此節點的所有子節點。 |
void |
removeFromParent()
通過向此節點提供一個 null 父節點,從階層樹中移除以此節點為根的子階層樹。 |
void |
setAllowsChildren(boolean allows)
確定是否允許此節點擁有子節點。 |
void |
setParent(MutableTreeNode newParent)
將此節點的父節點設置為 newParent ,但不更改父節點的子節點陣列。 |
void |
setUserObject(Object userObject)
將此節點的使用者物件設置為 userObject 。 |
String |
toString()
返回將 toString() 發送到此節點的使用者物件的結果,如果此節點沒有使用者物件,則返回 null。 |
從類別 java.lang.Object 繼承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
欄位詳細資訊 |
---|
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
- 使用者提供的 Object,它構成節點的資料public DefaultMutableTreeNode(Object userObject, boolean allowsChildren)
userObject
- 使用者提供的 Object,它構成該節點的資料allowsChildren
- 如果為 true,則允許該節點有子節點,否則它始終為一個葉節點方法詳細資訊 |
---|
public void insert(MutableTreeNode newChild, int childIndex)
newChild
(如果它有父節點),將子節點的父節點設置為此節點,然後,將該子節點添加到此節點位於索引 childIndex
處的子節點陣列。newChild
不能為 null,也不能為此節點的祖先。
MutableTreeNode
中的 insert
newChild
- 在此節點下插入的 MutableTreeNodechildIndex
- 此節點的子節點陣列中的索引,它是此節點插入的位置
ArrayIndexOutOfBoundsException
- 如果 childIndex
超出邊界
IllegalArgumentException
- 如果 newChild
為 null,或者是此節點的祖先
IllegalStateException
- 如果此節點不允許有子節點isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
public void remove(int childIndex)
MutableTreeNode
。
MutableTreeNode
中的 remove
childIndex
- 要移除的此節點的子節點陣列中子節點的索引
ArrayIndexOutOfBoundsException
- 如果 childIndex
超出邊界public void setParent(MutableTreeNode newParent)
newParent
,但不更改父節點的子節點陣列。從 insert()
和 remove()
調用此方法,以重新分派子節點的父節點,而不應從其他任何地方向它傳遞訊息。
MutableTreeNode
中的 setParent
newParent
- 此節點的新父節點public TreeNode getParent()
TreeNode
中的 getParent
public TreeNode getChildAt(int index)
TreeNode
中的 getChildAt
index
- 此節點的子節點陣列中的一個索引
ArrayIndexOutOfBoundsException
- 如果 index
超出邊界public int getChildCount()
TreeNode
中的 getChildCount
public int getIndex(TreeNode aChild)
-1
。此方法執行線性搜尋,該方法花費時間為 O(n),其中 n 表示子節點數。
TreeNode
中的 getIndex
aChild
- 要在此節點的子節點中搜尋的 TreeNode
-1
IllegalArgumentException
- 如果 aChild
為 nullpublic Enumeration children()
TreeNode
中的 children
public void setAllowsChildren(boolean allows)
allows
為 false,則移除此節點的所有子節點。
註:預設情況下,節點允許有子節點。
allows
- 如果允許此節點擁有子節點,則為 truepublic boolean getAllowsChildren()
TreeNode
中的 getAllowsChildren
public void setUserObject(Object userObject)
userObject
。
MutableTreeNode
中的 setUserObject
userObject
- 構成此節點的使用者指定資料的 ObjectgetUserObject()
,
toString()
public Object getUserObject()
setUserObject(java.lang.Object)
,
toString()
public void removeFromParent()
MutableTreeNode
中的 removeFromParent
public void remove(MutableTreeNode aChild)
aChild
。
MutableTreeNode
中的 remove
aChild
- 要移除的此節點的子節點
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
是此節點的後代 -- 如果它是此節點、此節點的一個子節點或此節點的一個子節點的後代,則返回 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
(包含)之間的節點數。每個 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
是最後一個子節點,則返回 null。此方法對此節點的子節點執行線性搜尋,以尋找 aChild
,並且花費時間為 O(n),其中 n 表示子節點數;要遍歷整個子節點陣列,請改用列舉。
aChild
之後
IllegalArgumentException
- 如果 aChild
為 null,或者不是此節點的子節點children
public TreeNode getChildBefore(TreeNode aChild)
aChild
之前的子節點,它必須是此節點的子節點。如果 aChild
是第一個子節點,則返回 null。此方法對此節點的子節點執行線性搜尋,以尋找 aChild
,並且花費時間為 O(n) ,其中 n 表示子節點數。
aChild
之前
IllegalArgumentException
- 如果 aChild
為 null,或者不是此節點的子節點public boolean isNodeSibling(TreeNode anotherNode)
anotherNode
是此節點的兄弟節點(與此節點共享同一父節點),則返回 true。節點是其本身的兄弟節點。如果 anotherNode
為 null,則返回 false。
anotherNode
- 測試其是否為此節點的兄弟節點
anotherNode
是此節點的兄弟節點,則返回 truepublic int getSiblingCount()
1
)。
public DefaultMutableTreeNode getNextSibling()
children
public DefaultMutableTreeNode getPreviousSibling()
public boolean isLeaf()
getAllowsChildren
聯合使用
TreeNode
中的 isLeaf
getAllowsChildren()
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()
發送到此節點的使用者物件的結果,如果此節點沒有使用者物件,則返回 null。
Object
中的 toString
getUserObject()
public Object clone()
Object
中的 clone
Cloneable
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。