Hi,
ich hab hier folgendes Problem: Ich habe einen Vector mit "Report"-Objekten. ich lade jedes dieser Report-Objekte in jeweils eine Node und stelle das Ganze dann in einem JTree dar. Geht auch alles, nur leider schaff ich es nicht dass jede Node ihr eigenes Icon hat...
Bis jetzt habe ich das folgender Maßen:
Das Problem ist hier, dass jede Node genau das Icon hat, das als letztes gesetzt worden ist. Heißt, das LeafIcon wird für jede Node des Baumes gesetzt. Ich will es aber nur für die aktuelle Node setzen. Irgend eine Idee wie das geht?
Ich hab auch schon versucht einen eigenen Renderer zu erstellen und diesem Renderer das Report-Objekt zu übergeben, damit sich der Renderer das Icon aus dem Report-Objekt laden kann. Führt zu dem gleichen Ergebnis.
Und der Renderer:
ich hab hier folgendes Problem: Ich habe einen Vector mit "Report"-Objekten. ich lade jedes dieser Report-Objekte in jeweils eine Node und stelle das Ganze dann in einem JTree dar. Geht auch alles, nur leider schaff ich es nicht dass jede Node ihr eigenes Icon hat...
Bis jetzt habe ich das folgender Maßen:
Java:
for (ReportTemplate report : reports) {
// Create node.
DefaultMutableTreeNode node;
node = new DefaultMutableTreeNode(report.getNodeName());
node.setUserObject(report);
// Set icon for the node.
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setLeafIcon(report.getIcon());
tree.setCellRenderer(renderer);
// Add node to tree.
model.insertNodeInto(node, root, root.getChildCount());
model.reload();
cardPanel.add(report.getCardPanel(), report.getNodeName());
}
Das Problem ist hier, dass jede Node genau das Icon hat, das als letztes gesetzt worden ist. Heißt, das LeafIcon wird für jede Node des Baumes gesetzt. Ich will es aber nur für die aktuelle Node setzen. Irgend eine Idee wie das geht?
Ich hab auch schon versucht einen eigenen Renderer zu erstellen und diesem Renderer das Report-Objekt zu übergeben, damit sich der Renderer das Icon aus dem Report-Objekt laden kann. Führt zu dem gleichen Ergebnis.
Java:
for (ReportTemplate report : reports) {
// Create node.
DefaultMutableTreeNode node;
node = new DefaultMutableTreeNode(report.getNodeName());
node.setUserObject(report);
// Set icon for the node.
ReportCellRenderer renderer = new ReportCellRenderer(report);
tree.setCellRenderer(renderer);
// Add node to tree.
model.insertNodeInto(node, root, root.getChildCount());
model.reload();
cardPanel.add(report.getCardPanel(), report.getNodeName());
}
Und der Renderer:
Java:
public class ReportCellRenderer extends DefaultTreeCellRenderer {
ReportTemplate report;
public ReportCellRenderer(ReportTemplate report) {
this.report = report;
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus);
setIcon(report.getIcon());
return this;
}
}