JTree отключить эффект подсветки на определенных узлах

У меня есть Jtree и мне нужно удалить эффект выделения на определенном узле.

Итак, теперь у меня есть это для узлов Алла

и я хотел бы иметь это на определенном узле:

Как мне этого добиться? Спасибо

2 ответа

Решение

-Во-первых: вам нужно установить объект (со своим собственным свойством) для узла следующим методом:

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

Не забудьте реализовать 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;
        }
}

Третье: установите для вашего рендерера дерево:

yourTree.setCellRenderer(new MyRenderer());

Не могли бы вы, возможно, использовать что-то подобное? Не уверен в практичности и не проверял это

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]);
                  }
           }
}
Другие вопросы по тегам