gpt4 book ai didi

java - 动态更改 JTree 的节点图像

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:18 24 4
gpt4 key购买 nike

我正在使用 CustomCellRenderer 来显示 JTree 的节点,以显示带有节点的图像如下所示:-

class CustomTreeCellRenderer extends DefaultTreeCellRenderer{

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

JLabel label = (JLabel) this ;

label.setIcon( new ImageIcon("white.png") ) ;

return this;
}
}

我的要求是在某些外部操作中更改节点的图像。我正在尝试重新加载 JTree 模型,但它无法正常工作,如下所示:-

public void actionPerformed(ActionEvent ae) {

DefaultTreeModel model = (DefaultTreeModel) tree.getModel() ;

JLabel label = (JLabel) tree.getCellRenderer() ;
System.out.println(label.getIcon()); //displaying white.png

label.setIcon( new ImageIcon("black.gif") ) ;


model.reload() ;
}

我哪里做错了?????

最佳答案

几点:

  1. 在类似actionPerformed 的方法中从表中获取渲染器并修改它不是常见的做法。您应该注意到渲染器是共享的,因此您将影响列中使用该渲染器的所有单元格
  2. 即使您在 actionPerformed 期间在渲染器实例上设置了 Icon,渲染器始终可以通过 getTreeCellRendererComponent 方法进行绘制,并且因为你总是将图标设置为“white.png”,所以你永远不会显示“black.gif”。

您可以选择在 actionPerformed 方法中设置模型的状态,然后从 getTreeCellRendererComponent 中查询要显示的图标的模型.

例如:

public void actionPerformed(ActionEvent ae) {

MyCustomTreeModel model = (MyCustomTreeModel) tree.getModel() ;
...
model.setMyState(state); //set the state based on the action
}

在渲染器中:

public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus)
{
MyCustomTreeModel model = (MyCustomTreeModel) tree.getModel();
....
setIcon(model.getMyIconBasedOnTheStateISetInActionPerformed());
return this;
}

关于java - 动态更改 JTree 的节点图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199987/

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