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


class Animal:只是具有不同参数,设置器和获取器的构造函数。
class MainClass:动物的ArrayList。 Main在这里运行。
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();


然后使用我的动物课程的二传手。

我的问题是,仅单击JTree,如何访问该特定动物?

最佳答案

您可以像下面这样。希望它能帮助您进步。

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();
        }
    }
});

10-07 19:12
查看更多