노드에서 JButton을 추출하고이를 JTree로 출력하는 간단한 TreeCellRenderer가 있습니다.CPU를 먹는 TreeCellRenderer
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 %의 CPU를 먹습니다. 이것을 제거 할 수있는 방법이 있습니까? 또는 JButton을 트리로 출력하기 위해 렌더러를 사용할 필요가 없습니까?
위의 수정 된 코드를 추가했지만 버튼이 올바르게 표시되지 않는 문제가 발생합니다 (모두 작은 것으로 나타남).
처음에는 'super' 메소드를 호출하는 이유는 무엇입니까? (아마도 문제는 아니지만 과장된 것처럼 보입니다.) – millimoose
저는 완전히 확신 할 수 없습니다. 제가 본 예에서 보았습니다. 나는 그것을 간과 한 것 같습니다. 그러나 제거는 많은 일을하지 않는 것처럼 보입니다. – Fallso
은 매번 새 레이블을 만들지 않습니다 (효과는 30/50 %만큼 커서는 안 됨). 유효성 검사는 불필요합니다 (결국 레이블 일뿐입니다). ProgressButton이란 무엇입니까? 백그라운드에서 뭔가 더러워지면 어떨까요? – kleopatra