Как я могу получить количество листовых узлов всех родительских узлов в jtree java
Я новичок в Jtree и Java.
Итак, у меня есть такая древовидная структура :
-АБВГД
--Efghi
---Pqrst
---Uvwxyz
---Ксиза
--- Hdwik
---Lmnop
--- Bcdef
--Tqrsp
--- Джумак
----Уоаха
---- Лобте
-----Cshnt
---- Карк
Теперь я хочу получить количество Abcd = 14 (то есть количество всех потомков Abcd+1) аналогично, Abcd-Efghi = 7 (то есть количество всех листовых узлов Efghi+1)
Но я не могу получить счет. Вот код :
import java.util.Enumeration; import javax.swing.JFrame; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import java.io.*; import java.util.*; public class treeTest { public treeTest(List<String> somelist) { DefaultMutableTreeNode root = new DefaultMutableTreeNode(somelist.get(0)); DefaultTreeModel model = new DefaultTreeModel(root); JTree tree = new JTree(model); for(int i = 1;i<somelist.size();i++) { buildTreeFromString(model, somelist.get(i)); } // UI JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(tree); f.setSize(300, 300); f.setLocation(200, 200); f.setVisible(true); for (int i = 0; i < tree.getRowCount(); i++) { tree.expandRow(i); } DefaultMutableTreeNode rootNode = ((DefaultMutableTreeNode)tree.getModel().getRoot()); int n = tree.getModel().getChildCount(rootNode); System.out.println(n); } private void buildTreeFromString(final DefaultTreeModel model, final String str) { // Fetch the root node DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot(); // Split the string around the delimiter String [] strings = str.split(" - "); // Create a node object to use for traversing down the tree as it // is being created DefaultMutableTreeNode node = root; // Iterate of the string array for (String s: strings) { // Look for the index of a node at the current level that // has a value equal to the current string int index = childIndex(node, s); // Index less than 0, this is a new node not currently present on the tree if (index < 0) { // Add the new node DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(s); node.insert(newChild, node.getChildCount()); node = newChild; } // Else, existing node, skip to the next string else { node = (DefaultMutableTreeNode) node.getChildAt(index); } } } private int childIndex(final DefaultMutableTreeNode node, final String childValue) { Enumeration<DefaultMutableTreeNode> children = node.children(); DefaultMutableTreeNode child = null; int index = -1; while (children.hasMoreElements() && index < 0) { child = children.nextElement(); if (child.getUserObject() != null && childValue.equals(child.getUserObject())) { index = node.getIndex(child); } } return index; } public static void main(String[] args) throws FileNotFoundException, IOException { List<String> list = new ArrayList<String>(); BufferedReader reader = new BufferedReader(new FileReader("Filepath\Sample.txt")); String line; while ((line = reader.readLine()) != null) { list.add(line); } reader.close(); new treeTest(list); } }
Есть ли какой-нибудь способ получить количество листьев каждого родителя в дереве или есть какой-то другой способ получить эту информацию без использования дерева?
Что я уже пробовал:
Я пробовал создать Jtree.
Patrice T
Я бы не стал использовать дерево для этой задачи, оно просто усложняет ситуацию.
Member 13265840
Тогда что же мне делать, вы можете мне помочь