Java 选定节点的JTree着色

Java 选定节点的JTree着色,java,swing,user-interface,windowbuilder,Java,Swing,User Interface,Windowbuilder,我看到了很多关于JTree着色问题的帖子和问题。但我没有找到任何解决我的具体问题的办法 我想选择一个节点并高亮显示它,以防单击我自制的激活按钮,并通过单击停用按钮撤消高亮显示 DefaultMutableTreeNode root = new DefaultMutableTreeNode("Motor testing"); root.add(new DefaultMutableTreeNode("Option 1000 RPM")); root.add(new Defau

我看到了很多关于
JTree
着色问题的帖子和问题。但我没有找到任何解决我的具体问题的办法

我想选择一个节点并高亮显示它,以防单击我自制的激活按钮,并通过单击停用按钮撤消高亮显示

    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Motor testing");
    root.add(new DefaultMutableTreeNode("Option 1000 RPM"));
    root.add(new DefaultMutableTreeNode("Option 2000 RPM"));
    //--------------- activate button
    JButton btnNewButton = new JButton("Activate");
    btnNewButton.addActionListener(new ActionListener() {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    //.... essential rest

    }
我尝试了很多方法,比如修改
DefaultTreeCellRenderer
。但我没能解决这个问题

编辑:

我尝试了以下几句话:

btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
                DefaultMutableTreeNode node =  (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
                ((MyTreeCellRenderer) tree.getCellRenderer()).activateLeaf = true;
         }
    }
以及:

但只有在按下激活按钮后更改选择时,节点才会变为绿色。如果我在设置标志后立即重置标志,则不会发生任何事情。我想要一个能够修改特定节点的解决方案,并且能够通过每个父节点运行recursivley


我还希望能够更改多个选项,而不仅仅是一个。

添加一个
树.repaint()
调用按钮的actionListener。

“我尝试了很多方法,比如修改DefaultTreeCellRenderer。”试着发布一个该尝试的示例。“但我没能解决这个问题。”为什么不呢?考虑到我们不是读心术的人,清楚而具体地说明你的尝试出了什么问题,以及你在哪里被卡住是有意义的。我可能会投票结束这篇文章,因为“缺少MCVE”或“不清楚你在问什么”,但我暂时不会这么做。你是说,你看到了其他相关帖子,并且已经自己尝试了一些东西。如果您能准确地说明您尝试了什么(显示代码),错误是什么,或者为什么其他问答不适用于您的问题。@MikeMB“。或者为什么其他问答不适用于您的问题。”这提醒了我。。那也一样,但我会改变或是改变。因此,请提供1)2)关于失败的具体原因的信息。3)查看问题的链接,并简要说明为什么每个问题都未能解决这一常见问题的小变体。我已编辑了我的问题,感谢您的快速回复“我已编辑了我的问题”,遗憾的是您没有花更多的精力理解a是什么:(
public class MyTreeCellRenderer extends DefaultTreeCellRenderer {


public boolean activateLeaf = false;

@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
        boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
    super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);    

   if(activateLeaf)
       setForeground(Color.GREEN);

   return this;
}