我之前问过这个问题,但我觉得我没有给出太多的代码来解释我的问题。如何在java jtree中动态地(从列表中)添加节点到我的父节点?
这就是我想做的事:
我有一个名为User
对象的列表。每个对象包含两个字段 - username
和password
。我创建了一个方法来构建一个JTree,像这样的用户名:
public class UserTreeBuilder implements TreeWillExpandListener {
private JTree userTree;
DefaultMutableTreeNode dummyParent;
public JTree build(List<User> list){
DefaultMutableTreeNode top = new DefaultMutableTreeNode("");
createNodes(top, list);
userTree = new JTree(top);
userTree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
userTree.setRootVisible(false);
userTree.addTreeWillExpandListener(this);
return userTree;
}
public void createNodes(DefaultMutableTreeNode top, List<User> list) {
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode user = null;
category = new DefaultMutableTreeNode("User");
top.add(category);
for(User ui : list){
user = new DefaultMutableTreeNode(ui.getUserName());
category.add(user);
}
}
@Override
public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) userTree.getLastSelectedPathComponent();
String nodeName = node.toString();
System.out.println("NODE TO STRING: "+nodeName);
if (node == null)
//Nothing is selected.
return;
}
@Override
public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
throw new UnsupportedOperationException("Not supported yet.");
}
它的工作好,我看到名单为:
(folder icon) users
(dot icon) user1
(dot icon) user2
(dot icon) user3
etc.
所以账户user1
,user2
等都是最低的节点。
我有一个方法,获取用户名作为参数,并返回属于该用户的东西的列表。它看起来像这样:
public ArrayList<Things> fetchThings(User user){
List<Things> list = new ArrayList<Things>();
.
.
.
return list;
我的问题是 - 我怎么能取东西对特定用户(调用我的方法fetchThings)当有人点击我原来JTree的给定用户,然后显示那些东西的子节点分配给那个用户?
例如,有人点击user2
,这是他看到的是:
(folder icon) users
(folder icon) user1
(folder icon) user2
(dot icon) thing1
(dot icon) thing2
(dot icon) thing3
.
.
.
(folder icon) user3
etc.
我试图用孩子的延迟加载从https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html这个页面,但我不能使它发挥作用。你能帮我实施我吗?
谢谢,T他是我得到的最明确答案之一,我非常感谢!还有一个问题 - 你能告诉我应该如何调用我的方法fetchThings(User user),以及如何根据它返回的'something'列表将父节点添加到父节点上? – randomuser1
好吧,您已经知道如何将节点添加到另一个节点(您已经设置了初始树)。再次,最好的地方是阅读[DefaultMutableTreeNode'的JavaDocs](https://docs.oracle.com/javase/8/docs/api/javax/swing/tree/DefaultMutableTreeNode.html)。 “最好”的地方是主观的,但我可能会从'treeWillExpand'开始 – MadProgrammer