TreeView cellFactory

breakpoint

Mitglied
Ich mach gerade meine ersten Schritte mit der cellFactory von TreeView und ich frag mich, wieso die Items nicht mehr richtig ausgeblendet ("hide") werden, wenn man auf den Pfeil nebe dem Elternelement klickt... ich vermute, ich hab da was nicht richtig implementiert?

Java:
package com.test;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class MainWindow extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
       
        StackPane root = new StackPane();
        Scene scene = new Scene(root, 300, 300);
       
        TreeView tree = new TreeView();
       
        tree.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {

            @Override
            public TreeCell<String> call(TreeView<String> arg0) {
                // TODO Auto-generated method stub
                TreeCell<String> cell = new TreeCell<String>() {
                    @Override
                    protected void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        if(item != null) {
                            setGraphic(getTreeItem().getGraphic()); 
                            setText("Iten name");
                        }
                    }
                };
                return cell;
            }
        });

        TreeItem<String> rootItem = new TreeItem<String>("root");
        TreeItem<String> child = new TreeItem<String>("child");
        TreeItem<String> child2 = new TreeItem<String>("child of child");
       
        rootItem.getChildren().add(child);
        rootItem.setExpanded(true);
        child.getChildren().add(child2);
        child.setExpanded(true);
       
        tree.setRoot(rootItem);
       
        root.getChildren().add(tree);
       
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
 

knilch

Bekanntes Mitglied
Hi,
Du musst in der Implementation von updateItem noch eine Anpassung machen:
Java:
protected void updateItem(String item, boolean empty) {
    super.updateItem(item, empty);
    if (empty) {
        setText(null);
        setGraphic(null);
    }
    else {
        setGraphic(getTreeItem().getGraphic());
        setText("Iten name");
    }
}
Damit sollte es gehen.
Hier ist noch ein Link mit Beispielen: https://docs.oracle.com/javafx/2/ui_controls/tree-view.htm
 

breakpoint

Mitglied
Danke für deine Antwort. Wenn ich in meiner Implementation den Fall, dass empty == true ist, abdecke, geht gar nichts mehr. Es werden nicht einmal mehr die Pfeilsymbole gerendet. Funktioniert der Code bei dir?
 

knilch

Bekanntes Mitglied
Hi,
empty ist ein boolean. Du must keinen Vergleich: empty == true machen...
entweder:
Java:
if(empty)  {
// falls emty true ist, mach dies...
}
else {
// falls emty false ist, mach etwas anderes...
}
Das, was ich gepostet habe, funktioniert...
hier nochmals dein Code mit der Änderung von mir:
Java:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class MainWindow extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
     
        StackPane root = new StackPane();
        Scene scene = new Scene(root, 300, 300);
     
        TreeView<String> tree = new TreeView<String>();
     
        tree.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {

            @Override
            public TreeCell<String> call(TreeView<String> arg0) {
                // TODO Auto-generated method stub
                TreeCell<String> cell = new TreeCell<String>() {
                    @Override
                    protected void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty) {
                            setText(null);
                            setGraphic(null);
                        }
                        else {
                            setGraphic(getTreeItem().getGraphic());
                            setText("Item name");
                        }
                    }
                };
                return cell;
            }
        });

        TreeItem<String> rootItem = new TreeItem<String>("root");
        TreeItem<String> child = new TreeItem<String>("child");
        TreeItem<String> child2 = new TreeItem<String>("child of child");
     
        rootItem.getChildren().add(child);
        rootItem.setExpanded(true);
        child.getChildren().add(child2);
        child.setExpanded(true);
     
        tree.setRoot(rootItem);
     
        root.getChildren().add(tree);
     
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

Poste doch mal deinen code
 

breakpoint

Mitglied
Hi, danke für den vollständigen Code. Ja, den Vergleich mit dem boolean-Wert habe ich schon richtig gemacht, es nur so im Text geschrieben. Ich mach später mal diff zwischen deinem und meinem Code, ich habe da sicherlich einen Vertipper wo drin. Danke dir nochmal.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaFX TreeView - TreeItem - SelectedItem AWT, Swing, JavaFX & SWT 7
W JavaFX JavaFX - TreeView will nicht AWT, Swing, JavaFX & SWT 8
ProggersWorld JavaFX Icons im TreeView werden nicht angezeigt AWT, Swing, JavaFX & SWT 1
L JavaFX TreeView aufstellen läuft irgendwie auf Endlosschleife AWT, Swing, JavaFX & SWT 3
L JavaFX TreeView Edit Mode über F2 AWT, Swing, JavaFX & SWT 13
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
B JavaFx TreeView mit file system AWT, Swing, JavaFX & SWT 1
D JavaFX TreeView stylen AWT, Swing, JavaFX & SWT 6
L JavaFX TreeView mit File Objects AWT, Swing, JavaFX & SWT 0
P TreeView automatisch an große von Inhalt anpassen AWT, Swing, JavaFX & SWT 3
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
I JavaFX Im TreeView, TreeItems sortieren AWT, Swing, JavaFX & SWT 3
D javafx.scene.control.TreeView als dropdown Menü AWT, Swing, JavaFX & SWT 6
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
I JavaFX TreeView Pfeil nicht mehr Klickbar machen AWT, Swing, JavaFX & SWT 1
B JavaFX Wie Treeview aus xml erzeugen AWT, Swing, JavaFX & SWT 11
B Convert Treeview to XML AWT, Swing, JavaFX & SWT 9
N JavaFX TreeView mit verschiedenen Datentypen AWT, Swing, JavaFX & SWT 8
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX TreeView Expanded-Icon ändern AWT, Swing, JavaFX & SWT 0
ToBJo JavaFX TreeView zerstört sich selbst AWT, Swing, JavaFX & SWT 1
G JavaFX TreeView stylen AWT, Swing, JavaFX & SWT 2
G JavaFX TreeView AWT, Swing, JavaFX & SWT 3
G Problem mit TreeView AWT, Swing, JavaFX & SWT 2
L TreeViewerColumn - gesamte TreeView-breite nutzen? AWT, Swing, JavaFX & SWT 5
T SWT Treeview größe ändern AWT, Swing, JavaFX & SWT 2
C SWT Error/Warnings in TreeView AWT, Swing, JavaFX & SWT 2
P Eindeutiger Knoten im Treeview AWT, Swing, JavaFX & SWT 3
K SystemIcons v. Dateien & Verz. im TreeView anzeigen AWT, Swing, JavaFX & SWT 2
missy72 JavaFX CellFactory deaktivieren, oder löschen AWT, Swing, JavaFX & SWT 2
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
temi JavaFX CellFactory und CellValueFactory AWT, Swing, JavaFX & SWT 2
L JavaFX TableColumns mit CellFactory setzen AWT, Swing, JavaFX & SWT 9
K TreeTableView (cellFactory) - wie Daten in Spalten einfügen AWT, Swing, JavaFX & SWT 0
V JavaFX Zwei Dinge in einer CellFactory erledigen AWT, Swing, JavaFX & SWT 8
J CellFactory in Abhängigkeit von anderer Zelle AWT, Swing, JavaFX & SWT 4
M JavaFX CellFactory Best Practice AWT, Swing, JavaFX & SWT 1
B Erstellen eigener Combobox ("CellFactory") AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben