我使用Swing控件创建了一个JTree,名为treeWorld。其根节为根和儿童,即哺乳动物、鸟类、爬行动物、两栖动物、昆虫。现在我想添加麻雀,布谷鸟到鸟类编程。
但我不能把麻雀,布谷鸟加到鸟身上。
这是我的代码:
DefaultTreeModel model = (DefaultTreeModel)treeWorld.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
DefaultMutableTreeNode bird = new DefaultMutableTreeNode("Birds");
DefaultMutableTreeNode sparrow = new DefaultMutableTreeNode("sparrow");
DefaultMutableTreeNode cuckoo = new DefaultMutableTreeNode("cuckoo");
bird.add(sparrow);
bird.add(cuckoo);
this.pack();
this.setVisible(true);发布于 2014-10-28 10:54:35
似乎您从未将bird节点添加到您的JTree中的问题,请使用root.add(bird);。
如果根节点已经包含了鸟类节点,则需要在root中搜索该节点,而不是创建新的节点。
如果将新节点添加到可见树中,也可以使用model.nodesWereInserted(NODE, new int[]NODE.getChildCount()-1});。添加新子节点的NODE节点。
示例:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class TestFrame extends JFrame {
private JTree t;
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
DefaultMutableTreeNode bird = new DefaultMutableTreeNode("Birds");
root.add(bird);
DefaultTreeModel model = new DefaultTreeModel(root);
add(t=new JTree(model));
JButton btn = new JButton("add");
btn.addActionListener(getAddListener());
add(btn,BorderLayout.SOUTH);
}
private ActionListener getAddListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DefaultTreeModel model = (DefaultTreeModel)t.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
Enumeration children = root.children();
while(children.hasMoreElements()){
DefaultMutableTreeNode node = (DefaultMutableTreeNode) children.nextElement();
if(node.toString().equals("Birds")){
DefaultMutableTreeNode sparrow = new DefaultMutableTreeNode("sparrow");
DefaultMutableTreeNode cuckoo = new DefaultMutableTreeNode("cuckoo");
node.add(sparrow);
node.add(cuckoo);
model.nodesWereInserted(node, new int[]{node.getChildCount()-1,node.getChildCount()-2});
break;
}
}
}
};
}
public static void main(String args[]) {
new TestFrame();
}
}发布于 2014-10-28 10:43:43
我不确定,因为您还没有发布完整的可运行示例,但我认为,您只需更新您的模型。
bird.add(sparrow);
bird.add(cuckoo);
model.reload(); // your model and tree don't know that you've added some nodes.
this.pack();
this.setVisible(true);https://stackoverflow.com/questions/26605981
复制相似问题