Ich habe folgende Implementierung von javafx.scene.control.TreeCell.
In updateItem() binde ich das TextProperty eines Labels an das SimpleStringProperty name der Klasse CustomItem.
Der Inhalte wird dadurch wie gewünscht aktualisiert, wenn sich name ändert. Allerdings scheint mir updateItem() nicht die richtige Stelle zu sein, um das Binding herzustellen.
Ich würde gerne, wenn ein TreeItem<CustomItem> erzeugt wird, das übergebene CustomItem-Objekt schon im Constructor zur Verfügung haben, um dort das Binding zu erstellen. Wie übergebe ich dazu in der Zeile return new TreeCellImp(); (siehe Code am Ende) das CustomItem-Objekt? Falls das ein guter Ansatz ist und updateItem() nicht doch die richtige Stelle ist?!
Danke für eure Hilfe!
Und die .setCellFactory:
In updateItem() binde ich das TextProperty eines Labels an das SimpleStringProperty name der Klasse CustomItem.
Der Inhalte wird dadurch wie gewünscht aktualisiert, wenn sich name ändert. Allerdings scheint mir updateItem() nicht die richtige Stelle zu sein, um das Binding herzustellen.
Ich würde gerne, wenn ein TreeItem<CustomItem> erzeugt wird, das übergebene CustomItem-Objekt schon im Constructor zur Verfügung haben, um dort das Binding zu erstellen. Wie übergebe ich dazu in der Zeile return new TreeCellImp(); (siehe Code am Ende) das CustomItem-Objekt? Falls das ein guter Ansatz ist und updateItem() nicht doch die richtige Stelle ist?!
Danke für eure Hilfe!
Java:
import javafx.scene.control.Label;
import javafx.scene.control.TreeCell;
public class TreeCellImp extends TreeCell<CustomItem> {
public TreeCellImp(CustomItem item) {
// Hier Binding erzeugen...
}
@Override
public void updateItem(CustomItem item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
// Aktueller Code:
Label label = new Label();
label.textProperty().bind(item.name);
setText(null);
setGraphic(label);
}
}
}
Und die .setCellFactory:
Code:
treeView.setCellFactory(new Callback<TreeView<CustomItem>, TreeCell<CustomItem>>() {
@Override
public TreeCell<CustomItem> call(TreeView<CustomItem> param) {
return new TreeCellImp();
}
});
Zuletzt bearbeitet: