JAVA - 如何从 JTree 访问 ArrayList 的对象
JAVA - How to access objects of ArrayList from 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 的更新版本。
在我的菜单中class我也有不同的 JTextPanel 用于动物的不同属性。
我需要做的(我不会复制我现在的代码,因为我认为没有意义)是能够点击一个节点,所以动物的不同属性被加载到JTextPanel,所以如果我修改值,它们也会在对象中更改。
我知道我应该使用类似的东西:
int value = textPanel.getText();
然后使用我的 class 动物的二传手。
我的问题是如何通过单击 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();
}
}
});
我在访问 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 的更新版本。
在我的菜单中class我也有不同的 JTextPanel 用于动物的不同属性。
我需要做的(我不会复制我现在的代码,因为我认为没有意义)是能够点击一个节点,所以动物的不同属性被加载到JTextPanel,所以如果我修改值,它们也会在对象中更改。
我知道我应该使用类似的东西:
int value = textPanel.getText();
然后使用我的 class 动物的二传手。
我的问题是如何通过单击 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();
}
}
});