我有一个带有几个节点和子节点的JTree。当我点击一个节点时我想知道它的深度(0,1,3)。我怎么知道?
selected_node.getDepth();
不返回当前节点的深度..
答案 0 :(得分:8)
您应该使用getLevel
。 getLevel
返回此节点上方的级别数 - 从根节点到此节点的距离。如果此节点是根节点,则返回0.或者,如果由于某种原因您获得了Treenode[]
路径(使用getPath()
),那么获取该数组的长度就足够了。
getDepth
不同,因为它返回以此节点为根的树的深度。这不是你想要的。
答案 1 :(得分:3)
基本上你必须在Iterate
内JTree
,但TreeSelectionListener
可以返回有趣的值,例如
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
public class TreeSelectionRow {
public TreeSelectionRow() {
JTree tree = new JTree();
TreeSelectionListener treeSelectionListener = new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent treeSelectionEvent) {
JTree treeSource = (JTree) treeSelectionEvent.getSource();
System.out.println("Min: " + treeSource.getMinSelectionRow());
System.out.println("Max: " + treeSource.getMaxSelectionRow());
System.out.println("Lead: " + treeSource.getLeadSelectionRow());
System.out.println("Row: " + treeSource.getSelectionRows()[0]);
}
};
tree.addTreeSelectionListener(treeSelectionListener);
String title = "JTree Sample";
JFrame frame = new JFrame(title);
frame.add(new JScrollPane(tree));
frame.setSize(300, 150);
frame.setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TreeSelectionRow treeSelectionRow = new TreeSelectionRow();
}
});
}
}
答案 2 :(得分:2)
如果您有TreeSelectionListener
来处理TreeSelectionEvent
,则可以使用TreeSelectionEvent#getPaths
方法检索所选的TreePath
。 TreePath#getPathCount
方法返回所选路径的深度。
您也可以直接向JTree
询问(尽管您需要在选择更改时通知听众),使用JTree#getSelectionPaths
方法。