JTree禁用某些节点上的高亮效果

时间:2014-03-28 14:16:50

标签: java swing jtree defaultmutabletreenode

我有一个Jtree,我需要删除某个节点上的突出显示效果。

所以,现在我有了alla节点

enter image description here

我希望在某个节点上有这个:

enter image description here

我怎样才能做到这一点? 感谢

2 个答案:

答案 0 :(得分:0)

你能不能使用这样的东西?不确定实用性而未经过测试

tree.addMouseListener (new MouseAdapter (){

        public void mousePressed ( MouseEvent e ){

           // Check for right click
           if (SwingUtilities.isRightMouseButton(e)){

                  int selection[] = tree.getSelectionRows();

                  for(int i=0; i< selection.size; i++){

                     tree.removeSelectionInterval(selection[i], selection[i]);
                  }
           }
}

答案 1 :(得分:0)

- 首先: 您需要使用以下方法将对象(使用您自己的属性)设置到节点:

Group aGroup = new Group(); //Obviously use your correct constructor 
DefaultMutableTreeNode node = new DefaultMutableTreeNode(yourObject);

请记住在Group class

中实现toString方法

- 第二: 创建一个扩展DefaultTreeCellRenderer并覆盖getTreeCellRendererComponent的新类,如下所示:

public class MyRenderer extends DefaultTreeCellRenderer {

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

            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;

            if(node.getUserObject().getYourProperty()){
                 setTextNonSelectionColor(Color.BLACK);
                 setBackgroundSelectionColor(Color.BLUE);
                 setTextSelectionColor(Color.WHITE);
                 setBorderSelectionColor(Color.WHITE);
            }
           else{
                 setTextNonSelectionColor(Color.LIGHT_GRAY);
                 setBackgroundSelectionColor(Color.RED);
                 setTextSelectionColor(Color.WHITE);
                 setBorderSelectionColor(Color.WHITE);
           }

            super.getTreeCellRendererComponent(
                tree, value, sel, exp, leaf, row, hasFocus);
            return this;
        }
}

-Third :将渲染器设置为树:

yourTree.setCellRenderer(new MyRenderer());