【问题标题】:manipulate jtree node via references seems not working (swing)通过引用操作 jtree 节点似乎不起作用(摆动)
【发布时间】:2023-04-08 22:13:01
【问题描述】:

我有以下问题(这与我的帖子blink a tree node有关):
我有一个自定义单元格渲染器。
在我的代码的某些部分,我创建了一个新的 DefaultMutableTreeNode 并将其存储在一个列表中

public static List<DefaultMutableTreeNode> nodes = new ArrayList<DefaultMutableTreeNode>() 
//in some time
DefaultMutableTreeNode aNode = new DefaultMutableTreeNode("SomeValue");
nodes.add(node);

在我的单元格渲染器中我这样做:

public Component getTreeCellRendererComponent(JTree tree, Object value,
      boolean selected, boolean expanded, boolean leaf, int row,
      boolean hasFocus) {
    DefaultMutableTreeNode n = (DefaultMutableTreeNode)value;
    if(nodes.contains(n)){
     //set background to red
    }
}

此时节点有一个节点,但代码永远不会进入 if 分支。
为什么?我无法理解,因为我已经将它存储在 arraylist 中。我会得到不同的参考吗?
我还创建了一个摇摆计时器:

Timer t = new Timer(400, new ActionListener(){
   public void actionPerformed(ActionEvent evt) {
        if(nodes.size == 0)
            return;
        TreePath p = new TreePath(nodes.get(0));
        Rectangle r = tree.getPathBounds(p);
        tree.repaint(r);
   }

});    

但我在tree.getPathBounds 中获得了 NPE。
我不明白为什么。我不能以这种方式操作存储在列表中的 DefaultMutableNodes 吗?我的想法做错了什么?
注意:如果我只是调用 repaint();在计时器和单元格渲染器中,我循环遍历节点以查看它是否显示与我存储的节点相同的文本,我想要什么我得到闪烁,工作

谢谢

【问题讨论】:

    标签: java user-interface swing jtree


    【解决方案1】:

    实际上TreePath 是一个对象列表...从树根到节点的路径。如果从单个节点创建路径,则仅当节点是树的根时,路径才存在于树中。 我会推荐使用TreeSelectionEvent public TreePath[] getPaths() 方法。该方法提供了实际路径。

    【讨论】:

    • 因此,如果我存储了一个DefaultMutableTreeNodes 列表,并且我希望每个都获得相应的矩形(在我的摇摆计时器中)来重新绘制,我该如何获得它?因为似乎唯一的方法是从存储的节点创建一个TreePath,然后调用getPathBounds,但这不起作用(如我的帖子中所述)。那么如何获取存储节点的矩形呢?
    【解决方案2】:

    我不认为 DefaultMutableTreeNode 定义了 equals 方法,因此它可能无法在您的节点列表中找到匹配项。尝试存储和搜索用户对象或扩展 DefaultMutableTreeNode 并定义 equals。

    【讨论】:

    • 好的,这是有道理的。但是对于 treePath 的 NPE 呢?
    • 不确定。 tree.repaint() 有效吗?问题只是得到界限吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2011-10-19
    相关资源
    最近更新 更多