Action in TreeCellRenderer definieren, aber wie?

Romsl

Erfahrenes Mitglied
Hi,

ich würde gerne bei einem Klick auf ein Image/Icon eine Action ausführen. Das Icon liegt in einem JTree.

Code:
public class VTreeCellRenderer extends DefaultTreeCellRenderer {

    /**
     * Sets the value of the current tree cell to <code>value</code>.
     * If <code>selected</code> is true, the cell will be drawn as if
     * selected. If <code>expanded</code> is true the node is currently
     * expanded and if <code>leaf</code> is true the node represets a
     * leaf and if <code>hasFocus</code> is true the node currently has
     * focus. <code>tree</code> is the <code>JTree</code> the receiver is being
     * configured for.  Returns the <code>Component</code> that the renderer
     * uses to draw the value.
     *
     * @return the <code>Component</code> that the renderer uses to draw the value
     */
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {

        boolean summable = false;
        if (value instanceof DefaultMutableTreeNode) {
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
            Object o = node.getUserObject();

            if (o instanceof VDimension) {
                summable = ((VDimension) o).isSummable();
            }
        }

        Component label = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);

        JPanel panel = new JPanel(new BorderLayout());
        panel.setBackground(Color.WHITE);
        panel.add(label, BorderLayout.CENTER);

        if (summable) {
            panel.add(VIconComponent.VIEW, BorderLayout.EAST);
        }

        return panel;
    }
}

Leider funktioniert es nicht wenn ich auf das "VIconComponent.VIEW" einen MouseListener lege. Ich vermute, dass dort noch was darüber liegt. Dieses "VIconComponent" ist von JComponent.

Gruß

Romsl
 
Hallo Romsl,

hast du schon den folgenden Abschnitt im Sun Java Tutorial, How to use JTree untersucht:

"If you want finer control over the node icons or you want to provide tool tips, you can do so by creating a subclass of DefaultTreeCellRenderer and overriding the getTreeCellRendererComponent method. Because DefaultTreeCellRenderer is a subclass of JLabel, you can use any JLabel method — such as setIcon — to customize the DefaultTreeCellRenderer.
...
"

http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html

Kenn mich mit JTrees eigentlich nicht aus, aber da ist die Rede von kontrollieren über die Icons. Es ist auch ein Beispielcode vorhanden.


Vg Erdal
 
Hi,

danke für Deinen Tipp, aber wenn du oben nochmal schaust siehst du, dass ich diese Variante bereits anwende.

Gruß

Romsl
 
Zurück