いくつかのノードとサブノードを持つ JTree があります。ノードをクリックすると、その深さ (0、1、3) を知りたい。どうすればそれを知ることができますか?
selected_node.getDepth();
現在のノードの深さを返しません..
を使用する必要がありますgetLevel
。getLevel
このノードの上のレベル数、つまりルートからこのノードまでの距離を返します。このノードがルートの場合、0を返します。または、何らかの理由でTreenode[]
(を使用して)パスを取得したgetPath()
場合は、その配列の長さを取得するだけで十分です。
getDepth
このノードをルートとするツリーの深さを返すため、は異なります。それはあなたが望むものではありません。
基本的には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();
}
});
}
}
TreeSelectionListener
を処理するがある場合は、メソッドを使用して、選択した を取得TreeSelectionEvent
できます。このメソッドは、選択したパスの深さを返します。TreeSelectionEvent#getPaths
TreePath
TreePath#getPathCount
メソッドを使用して、 に直接要求することもできますJTree
(ただし、選択が変更されたときにリスナーに通知する必要があります) JTree#getSelectionPaths
。