我之前問過這個問題,但我覺得我沒有給出太多的代碼來解釋我的問題。如何在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