Я сумасшедший, потому что я не понимаю, что я делаю неправильно. Мне нужно, чтобы каждый узел моего дерева имел другой значок, как будто он правильный, неправильный или нуждается в обновлении. Я видел документацию Oracle и множество веб-страниц (включая Stackoverflow), но мой код просто показывает все узлы с одинаковым значком. Я извиняюсь, если я сделал что-то не так, это мой первый пост:>DefaultTreeCellRenderer не работает как ожидалось
Дисплей: Я не могу показать, потому что я не имеют репутацию>. <
Представьте себе дерево и представьте, что он всегда показывает листIcon с gifNew значок. Кажется, что только состояние будет слушать последний узел.
Вот код (все вары правильно созданы, значки, такие как gifNew тоже):
ICONS:
static Icon closedIcon = new ImageIcon("folder.png");
static Icon openIcon = new ImageIcon("folder.png");
static Icon leafIcon = new ImageIcon("file.png");
static Icon gifWarn = new ImageIcon("warn.gif");
static Icon gifOk = new ImageIcon("ok.gif");
static Icon gifNew = new ImageIcon("plus.gif");
static Icon gifError = new ImageIcon("error.gif");
Вызов:
tree.setCellRenderer(new TreeRenderer());
Renderer:
private static class TreeRenderer extends DefaultTreeCellRenderer {
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);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String s = node.getUserObject().toString();
String error;
if (actualTree.equals("DOORS")){
error = checkTypeError(s, valuesClass.listOfValuesDOORS);
//System.out.println("DOORS - S: "+s);
}else{
error = checkTypeError(s, valuesClass.listOfValuesTC);
//System.out.println("TC - S: "+s);
}
switch (error) {
case "CORRECT":
setOpenIcon(openIcon);
setClosedIcon(closedIcon);
setLeafIcon(leafIcon);
break;
case "CREATE":
setOpenIcon(gifNew);
setClosedIcon(gifNew);
setLeafIcon(gifNew);
break;
case "DELETE":
setOpenIcon(gifError);
setClosedIcon(gifError);
setLeafIcon(gifError);
break;
case "UPDATE":
setOpenIcon(gifWarn);
setClosedIcon(gifWarn);
setLeafIcon(gifWarn);
break;
default:
setOpenIcon(openIcon);
setClosedIcon(closedIcon);
setLeafIcon(leafIcon);
//System.err.println("ERROR IN RENDERER. VALUE: "+error);
break;
}
return this;
}
/*****************************************
* Function that return which error have the actual node to push the icon when the tree is created.
*****************************************/
protected static String checkTypeError(String txt, List<valuesClass> list){
for (int i = 0; i < list.size(); i++) {
if (list.get(i).text.equals(txt))
if (list.get(i).create == true){
return "CREATE";
}else if (list.get(i).delete == true){
return "DELETE";
}else if (list.get(i).update == true){
return "UPDATE";
}else{
return "CORRECT";
}
}
return "DEFAULT";
}
}
O.O! ЗДОРОВО! Оно работает! Теперь у моего дерева разные значки для каждого случая! Теперь я могу продолжить проект! :> Я не могу дать вам репутацию для моего низкого уровня репутации, но у вас есть мастер: P – chiri4
Возможно, вы могли бы принять ответ, так как он сработал для вас :) –
Oww yea, прямо сейчас принято. Благодаря! – chiri4