여러 사용자 정의 클래스를 기반으로하는 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);
각 setState를 (문자열들)를 통해 설정할 수있는 특정 상태를 저장 JTreePanelNode (사용자 정의 클래스)의 객체가 Dynamically change icon of specific nodes in JTree 얻을 getState()를 통해. 그래서 내가 원하는 것은 다음과 같습니다 :
if(node.getState().equals("good")) ..
else if(node.getState.equals("bad")) ..
else ..
어떻게하면 좋을까요? 내가 이해하는 렌더러는 getTreeCellRendererComponent를 가진 모든 노드를 통과하고 setIcon과 여러 ifs()로 선택할 수있는 특정 아이콘을 적용합니다. 그러나 JTreePanelNode 캐스팅 할 수 없습니다. 어떤 해결책?
@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);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Object representedObject = node.getUserObject();
JLabel superLabel = super.getTreeCellRendererComponent();
String text = label.getText();
if(object.isGood()){ //i don't know your code
superLabel .setText (text +"goooooooood");
}else{
superLabel .setText (text +"badbadbabd");
}
return superLabel ;
}
왜'value'를'JTreePanelNode'에 캐스트 할 수 없습니까? – MadProgrammer