0

自分が何を間違っているのか理解できないので、私は頭がおかしくなっています。ツリーの各ノードには、正しい、正しくない、または更新が必要であるかのように、異なるアイコンが必要です。Oracle ドキュメントと多くの Web ページ (Stackoverflow を含む) を見ましたが、私のコードにはすべてのノードが同じアイコンで表示されています。初めての投稿なので間違っていたらすみません(>_<)

表示: 評判がないので表示できません >.<

ツリーを想像してみてください。そして、gifNewアイコンを含む leafIcon が常に表示されると想像してください。状態だけが最後のノードをリッスンするかのようです。

コードは次のとおりです (すべての変数が正しく作成され、アイコンも gifNew のようになります):

アイコン:

static Icon closedIcon = new ImageIcon("folder.png");
    static Icon openIcon = new ImageIcon("folder.png");
    static Icon leafIcon = new ImageIcon("file.png");
    static Icon gifWarn = new ImageIcon("warn.gif");
    static Icon gifOk = new ImageIcon("ok.gif");
    static Icon gifNew = new ImageIcon("plus.gif");
    static Icon gifError = new ImageIcon("error.gif");

電話:

tree.setCellRenderer(new TreeRenderer());

レンダラー:

private static class TreeRenderer extends DefaultTreeCellRenderer {


        public Component getTreeCellRendererComponent(JTree tree, Object value,
            boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {

            super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
            String s = node.getUserObject().toString();
            String error;
            if (actualTree.equals("DOORS")){
                error = checkTypeError(s, valuesClass.listOfValuesDOORS);
                //System.out.println("DOORS - S: "+s);
            }else{
                error = checkTypeError(s, valuesClass.listOfValuesTC);
                //System.out.println("TC - S: "+s);
            }

            switch (error) {
                case "CORRECT":
                    setOpenIcon(openIcon);
                    setClosedIcon(closedIcon);
                    setLeafIcon(leafIcon);
                    break;
                case "CREATE":
                    setOpenIcon(gifNew);
                    setClosedIcon(gifNew);
                    setLeafIcon(gifNew);
                    break;
                case "DELETE":
                    setOpenIcon(gifError);
                    setClosedIcon(gifError);
                    setLeafIcon(gifError);
                    break;
                case "UPDATE":
                    setOpenIcon(gifWarn);
                    setClosedIcon(gifWarn);
                    setLeafIcon(gifWarn);
                    break;
                default:
                    setOpenIcon(openIcon);
                    setClosedIcon(closedIcon);
                    setLeafIcon(leafIcon);
                    //System.err.println("ERROR IN RENDERER. VALUE: "+error);
                    break;
            }

            return this;
        }

        /*****************************************
        * Function that return which error have the actual node to push the icon when the tree is created.
        *****************************************/
        protected static String checkTypeError(String txt, List<valuesClass> list){

            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).text.equals(txt))
                    if (list.get(i).create == true){
                        return "CREATE";
                    }else if (list.get(i).delete == true){
                        return "DELETE";
                    }else if (list.get(i).update == true){
                        return "UPDATE";
                    }else{

                        return "CORRECT";
                    }
            }
            return "DEFAULT";
        }
    }
4

2 に答える 2