gpt4 book ai didi

java - 为 Jtree 中的每个节点设置图标

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:16 25 4
gpt4 key购买 nike

我想为我的 JTree 中的每个节点设置一个不同的图标,实际上我是从数据库加载每个节点,“while”,我将每个图标设置为根、叶或父节点。像这样:

我所有的声明都是全局的:

private ResultSet myResultSet;
protected DefaultTreeModel treeModel;
private DefaultMutableTreeNode rootNode,childNode,parent1,parent2;

这是我设置节点的代码:

myResultSet=rtnNodes(); /*Method that returns a RS with my nodes*/
while(myResultSet.next()){
switch(myResultSet.getInt(1)){ /*The first column is the type of node: root, parent, leaf...*/
case 0: treeModel = new DefaultTreeModel((rootNode=new DefaultMutableTreeNode(myResultSet.getString(2)))); break; /*root node*/
case 1: case 4: parent1 = parent2 = makeNode(rootNode); break; /*parent node*/
case 2: makeNode(parent2); break; /*leaf node*/
case 3: parent2 = makeNode(parent1); break; /*sub patern node*/
} /*makeNode is the method where I create the nodes*/
}

makeNode 的方法是这样的:

public DefaultMutableTreeNode makeNode(DefaultMutableTreeNode parent){
//The second column in the RS is the name of the node
treeModel.insertNodeInto((childNode=new DefaultMutableTreeNode(myResultSet.getString(2))),parent,parent.getChildCount());
return childNode;
}

用我的节点填充树模型后,我将模型设置为我的 JTree:

myJTree.setModel(treeModel);
myJTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

但问题是。当我尝试设置图标时。我创建了一个名为 myTreeRenderer 的子类,并使用它:

myJTree.setCellRenderer(new treeRenderer());

但是它并没有按照我的意愿设置图标,子类是:

private ImageIcon root,parent,leaf;

public myTreeRenderer() {
root=setIcons(2); /*setIcons is a method that I dont publish in this post, that helps me to set the path of the icons*/
parent=setIcons(3);
leaf=setIcons(4);
}

@Override
public Component getTreeCellRendererComponent(JTree tree,Object value,boolean selected,boolean expanded,boolean leaf,int row,boolean hasFocus){
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
DefaultMutableTreeNode nodo = (DefaultMutableTreeNode)value;
TreeNode t = nodo.getParent();
if(t!=null){
setIcon(root);
}
return this;
}

如何在不使用他的名字的情况下为每个节点设置图标?子类的代码按原样将所有节点设置为相同的图标,每次我在 jtree 中选择一个节点时,getTreeCellRendererComponent 都会运行,我不希望这样。

最佳答案

您可以在没有任何自定义渲染器的情况下更改 JTree 节点图标的默认 UI 值:

URL resource = logaff.class.getResource(IMAGE);
Icon icon = new ImageIcon(resource);

UIManager.put("Tree.closedIcon", icon);
UIManager.put("Tree.openIcon", icon);
UIManager.put("Tree.leafIcon", icon);

或者使用类似下一个的东西:

@Override
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected,expanded, leaf, row, hasFocus);
DefaultMutableTreeNode nodo = (DefaultMutableTreeNode) value;
if (tree.getModel().getRoot().equals(nodo)) {
setIcon(root);
} else if (nodo.getChildCount() > 0) {
setIcon(parent);
} else {
setIcon(leaf);
}
return this;
}

另请参阅 rendering mechanism .

关于java - 为 Jtree 中的每个节点设置图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20691946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com