3

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

4

2 に答える 2

2

そのツリーで表されるオブジェクトにアクセスできます。

@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 ;
}
于 2014-08-29T11:45:13.740 に答える