У меня есть простой TreeCellRenderer, который извлекает JButton из узла и выводит его на JTree.
public class ButtonCellRenderer extends JButton implements TreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
//setBackgroundNonSelectionColor(tree.getBackground());
ProgressButton b = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if (userObject instanceof ProgressButton) {
b = (ProgressButton) userObject;
return b;
}
}
if (b == null) {
System.out.println("Null!");
DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();
return defaultRenderer.getTreeCellRendererComponent(tree,
value, selected, expanded, leaf, row, hasFocus);
} else {
System.out.println("Returning label");
return new JLabel(b.getToolTipText(), b.getIcon(), SwingConstants.CENTER);
}
}
}
Я не уверен, почему, но кажется, что он застрял в цикле и потребляет около 30 ~ 50% ресурсов процессора. Есть ли способ устранить это? Или не нужно использовать средство визуализации для вывода JButton в дерево?
Я добавил исправленный код выше, но теперь у меня возникает проблема, когда кнопки не отображаются должным образом (все они выглядят маленькими).