7

いくつかのノードとサブノードを持つ JTree があります。ノードをクリックすると、その深さ (0、1、3) を知りたい。どうすればそれを知ることができますか?

selected_node.getDepth(); 

現在のノードの深さを返しません..

4

3 に答える 3

9

を使用する必要がありますgetLevelgetLevelこのノードの上のレベル数、つまりルートからこのノードまでの距離を返します。このノードがルートの場合、0を返します。または、何らかの理由でTreenode[](を使用して)パスを取得したgetPath()場合は、その配列の長さを取得するだけで十分です。

getDepthこのノードをルートとするツリーの深さを返すため、は異なります。それはあなたが望むものではありません。

于 2012-04-10T12:09:53.253 に答える
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();
            }
        });
    }
}
于 2012-04-10T12:14:11.880 に答える
2

TreeSelectionListenerを処理するがある場合は、メソッドを使用して、選択した を取得TreeSelectionEventできます。このメソッドは、選択したパスの深さを返します。TreeSelectionEvent#getPathsTreePathTreePath#getPathCount

メソッドを使用して、 に直接要求することもできますJTree(ただし、選択が変更されたときにリスナーに通知する必要があります) JTree#getSelectionPaths

于 2012-04-10T12:20:46.687 に答える