У меня есть JTree, основанный на нескольких пользовательских классах. Я хочу указать несколько Узлов на определенный значок. Поэтому я сделал следующий код, основанный на этой ссылке: Dynamically change icon of specific nodes in JTreeИзменение значков JTree на основе пользовательских состояний объектов
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer() {
private static final long serialVersionUID = 1L;
private Icon good = new ImageIcon(getClass().getResource("/good.png"));
private Icon dunno = new ImageIcon(getClass().getResource("/dunno.png"));
private Icon bad = new ImageIcon(getClass().getResource("/bad.png"));
@Override
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean selected, boolean expanded,
boolean isLeaf, int row, boolean focused) {
Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, isLeaf, row, focused);
// JTreePanelNode node = (JTreePanelNode)c; - not possible
return c;
}
};
this.getTree().setCellRenderer(renderer);
Каждый из моих узлов является объектом JTreePanelNode (пользовательский класс), который сохраняет определенное состояние, которое может быть установлено с помощью SetState (String s) и получить через getState(). Так что я хочу что-то вроде этого:
if(node.getState().equals("good")) ..
else if(node.getState.equals("bad")) ..
else ..
Как я могу достичь чего-то подобного? Из того, что я понимаю, рендеринг проходит через каждый узел с помощью getTreeCellRendererComponent и применяет конкретный значок, который я могу выбрать с помощью setIcon и нескольких ifs(). Однако я не могу использовать JTreePanelNode. Любое решение? Спасибо :)
Почему вы не можете использовать 'value' для' JTreePanelNode'? – MadProgrammer