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