Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
MethodenMethode 'updateItem' der Klasse 'TreeCell'
Vielen Dank! Jetzt konnte ich nachsehen - gebracht hat es mir nichts
Mich beschäftigt das Thema CellFactory bei TreeView. Ich habe meiner TreeView eine CellFactory gesetzt:
Code:
bmCheckTreeView.setCellFactory(new Callback<TreeView<TreeObject>, TreeCell<TreeObject>>() {
@Override
public TreeCell<TreeObject> call(TreeView<TreeObject> param) {
return new MyTreeCell();
}
});
Code:
public class MyTreeCell extends TreeCell<TreeObject> {
@Override
public void updateItem(TreeObject item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setText(getItem() == null ? "" : getItem().toString());
setGraphic(getTreeItem().getGraphic());
if (getTreeItem() instanceof ElementTreeItem<?>) {
setContextMenu(((ElementTreeItem<TreeObject>) getTreeItem()).getMenu(item));
setUnderline(((TreeElement)getTreeItem().getValue()).isActive());
} else if (getTreeItem() instanceof ListTreeItem<?>) {
setContextMenu(((ListTreeItem<TreeObject>) getTreeItem()).getMenu(item));
} else {
setContextMenu(null);
}
}
}
}
Diesen Code habe ich irgendwo im Internet gefunden, aber natürlich so gut wie nicht verstanden. Das Dumme ist, er tut prinzipiell, was ich will, aber eben nicht immer
Ziel ist die Darstellung von unterschiedlichen Kontextmenüs zum einen und eine unterstrichene/nicht unterstrichene Ausgabe der Texte im Baum zum anderen.
Zur Unterscheidung, welches Kontextmenü dargestellt wird, dienen die beiden if Anweisungen. Mit instanceof wird geprüft, ob getTreeItem() ein ElementTreeItem oder ein ListTreeItem liefert. Die beiden setContextMenu-Aufrufe unterscheiden sich dann im cast.
Bei ElementTreeItem kann man ein boolean prüfen. Das ist eine Angabe aus meinen Daten. Diesen boolean übergebe ich SetUnderline(...)
Alles in allem funktioniert das gut. Meine unterschiedlichen Kontextmenüs werden angezeit, je nach dem, auf welchen Eintrag im Baum ich klicke. Auch werden meine 'aktiven Daten' entsprechend unterstrichen dargestellt. Spiele ich ein wenig mit meinem Baum herum (neue Einträge hinzufügen, Einträge kopieren und einfügen, den Status 'Aktiv' ändern usw., dann passiert es ab irgendeinem Zeitpunkt, daß die Kontextmenüs überall erscheinen und völlig falsche Einträge unterstrichen werden. Sogar leere Bereiche des TreeView werden zum Teil unterstrichen.
Also ist da wohl irgendwas falsch. Ich komme leider nun schon seit Stunden hier nicht weiter.