Auf Thema antworten

Ja ich verwende den selben TreeCellRenderer.

Kann man dann auch mehrere TreeCellRender schreiben und verwenden?

Oder wie realisiere ich das sonst?


Ja Code gibt es, ich poste mal die relevantesten Codeausschnitte:


Zunächst mal den TreeModelListener mit der Methode "treeNodesChanged".

Hier werden meine Wurzel und Unterknoten hinzugefügt.


[code=Java]

public void treeNodesChanged(TreeModelEvent e) {

        DefaultMutableTreeNode node;

        node = (DefaultMutableTreeNode) (e.getTreePath().getLastPathComponent());


        try {

            int index = e.getChildIndices()[0];

            node = (CheckNode) (node.getChildAt(index));


            CheckNode newNode = new CheckNode("New Node");

            CheckNode selNode = (CheckNode) tree.getLastSelectedPathComponent();


            if (node.toString().equals("Main") && bool1 == true) {

                model.insertNodeInto(new CheckNode("Namensraum"), selNode,

                        selNode.getChildCount());

                ja.append("<Main");

                model.insertNodeInto(new CheckNode("Element"), selNode, selNode

                        .getChildCount());

                model.insertNodeInto(new CheckNode("Array"), selNode, selNode

                        .getChildCount());

                bool1 = false;

            } else if (node.toString().equals("Verfahren1") && bool2 == true) {

                model.insertNodeInto(new CheckNode("Array"), selNode, selNode

                        .getChildCount());

                model.insertNodeInto(new CheckNode("AnyXML"), selNode, selNode

                        .getChildCount());

                model.insertNodeInto(new CheckNode("Attribut"), selNode,

                        selNode.getChildCount());

                bool2 = false;

            } else if (node.toString().equals("Verfahren2") && bool3 == true) {

                model.insertNodeInto(new CheckNode("Element"), selNode, selNode

                        .getChildCount());

                model.insertNodeInto(new CheckNode("Array"), selNode, selNode

                        .getChildCount());

                model.insertNodeInto(new CheckNode("Attribut"), selNode,

                        selNode.getChildCount());

                bool3 = false;

            } else

                ;


            TreeNode[] nodes = model.getPathToRoot(newNode);

            TreePath path = new TreePath(nodes);

            tree.expandPath(path);

            tree.scrollPathToVisible(path);

            tree.setSelectionPath(path);

            tree.startEditingAtPath(path);

            tree.revalidate();

            tree.repaint();


        } catch (NullPointerException exc) {

            exc.printStackTrace();

        }


    }

[/code]


Die Klasse CheckRenderer mit dem TreeCellRenderer:


[code=Java]

class CheckRenderer extends JPanel implements TreeCellRenderer {

    protected JCheckBox check;

    protected JPanel panel;

    protected JLabel label;

    protected JTextField t;


    protected JPanel getLeafRenderer() {

        // leafRendere bearbeiten

        return panel;

    }


    public CheckRenderer() {


        setLayout(null);

        setUI(null);

        add(check = new JCheckBox());


// Hier füge ich das Panel hinzu, jedoch für alle CheckNodes, was ich aber nur für bestimmte Nodes hinzufügen möchte

        add(panel = new JPanel());


        label = new JLabel("Einstellung");

        label.setSize(120, 25);


        t = new JTextField("");

        t.setSize(100, 25);

        // label.setEditable(true);

        panel.add(t, BorderLayout.SOUTH);

        panel.add(label, BorderLayout.EAST);

        panel.setEnabled(true);


        panel.setPreferredSize(new Dimension(280, 60));

        panel.setBorder(BorderFactory.createEtchedBorder());

        panel.setBackground(new Color(245, 255, 245));

        panel.setLayout(null);

        check.setBackground(Color.WHITE);

    }


    public Component getTreeCellRendererComponent(JTree tree, Object value,

            boolean isSelected, boolean expanded, boolean leaf, int row,

            boolean hasFocus) {

        String stringValue = tree.convertValueToText(value, isSelected,

                expanded, leaf, row, hasFocus);

        setEnabled(tree.isEnabled());


        if (isSelected) {

            check.setForeground(new Color(255, 155, 55));

            check.setBackground(new Color(55, 155, 255));

            tree.revalidate();

            tree.repaint();

        }


        check.setSelected(((CheckNode) value).isSelected());

        check.setBackground(new Color(245, 245, 245));

        panel.setFont(tree.getFont());


        tree.setEditable(true);


        label.setText(stringValue);

        label.setBounds(5, 0, 110, 25);


        t.setBounds(5, 30, 100, 25);

        t.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                if (t.getText() != null)

                    t.setText(t.getText());

                check.revalidate();

                check.repaint();

            }

        });


        MyTreeModelListener m = new MyTreeModelListener(tree, panel);


        return this;

    }

}

[/code]



Oben