いくつかのカスタム クラスに基づく 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 にキャストできません。解決策はありますか?ありがとう :)