JTree 着色选定节点

JTree coloring selected node

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

我想 select 一个节点并在单击我自制的激活按钮时突出显示它并通过单击停用按钮撤消突出显示。

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

和:

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

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

我也希望能够改变多个select离子,而不是一个。

为按钮的 actionListener 添加 tree.repaint() 调用。