JAVA - 如何从JTree访问ArrayList的对象

时间:2016-06-09 10:11:19

标签: java swing arraylist netbeans jtree

我在访问ArrayList的元素时遇到问题,只需单击相应的节点即可。这是我第一次使用它,我搜索了很多不同的教程,但我无法解决我的问题。这就是我到目前为止所做的:

  • class Animal:只是带有不同参数,setter和getter的构造函数。
  • class MainClass:动物的ArrayList。主要在这里运行。
  • class Menu:使用NetBeans设计的JFrame。要获取ArrayList的元素,我使用以下代码:

    public void refreshTree(){
    
        root = new DefaultMutableTreeNode("Animals");
        children1 = new DefaultMutableTreeNode("Carnivores");
    
        root.add(children1);
    
        mainTree = new JTree(root);
    
        List<Animal> animals = mainClass.returnList();     
    
        for(Animal animal: animals){
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(animal);
            children1.add(node);
        }
    
        jScrollPane2.setViewportView(mainTree);
    }
    

每次我在ArrayList中添加或删除一个元素时,我都会使用refreshTree()方法来获取我的ArrayList的更新版本。

在我的Menu类中,我还为动物的不同属性提供了不同的JTextPanel。

我需要做什么(我不会复制我现在的代码,因为我认为没有意义)是能够在一个节点中单击,因此动物的不同属性被加载到JTextPanel中,因此,如果我修改这些值,它们也会在对象中更改。

我知道我应该使用类似的东西:

int value = textPanel.getText();

然后使用我的Animal类的setter。

我的问题是如何只需点击JTree即可访问该特定动物?

1 个答案:

答案 0 :(得分:2)

你可以在下面这样做。希望它能帮助你进步。

JTree tree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Animals");
DefaultTreeModel model = new DefaultTreeModel(root);

tree.setModel(model);
root.add(new DefaultMutableTreeNode(new Animal("Dog","ACS")));
root.add(new DefaultMutableTreeNode(new Animal("Cat","BCS")));
root.add(new DefaultMutableTreeNode(new Animal("Lion","FCS")));

DefaultTreeSelectionModel sModel = new DefaultTreeSelectionModel(); 

sModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setSelectionModel(sModel);
tree.addTreeSelectionListener(new TreeSelectionListener() {

    @Override
    public void valueChanged(TreeSelectionEvent selection) {
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)selection.getPath().getLastPathComponent();
        if(selectedNode.isLeaf()) {
            Animal animal = (Animal)selectedNode.getUserObject();
        }
    }
});