user3027786
user3027786

Reputation: 185

TreeTableView data model

I am new to Java 8 world(with lambdas, functions etc,) and building a JavaFX 8 application, i am struggling to build the data model(TreeItem) for TreeTableView. The data is fetched from database as ObservableList<Certificate>. A Certificate object with ca=true could have children which could be tracked by issuerName field. My aim is to build a TreeTableView with various columns, where Certificates are presented as

Root(a dummy node)
|
|--Certificate1 (could be ca=false with no issuer match to any ca OR ca=true with no child)
|--Certificate2
|--Certificate3 (ca=true)
    |--Certifciate4 (issuer name machted with Certificate3)
    |--Certificate5 (issuer name machted with Certificate3)
|--Certificate6
|--Certificate7 (ca=true)
    |--Certifciate8 (issuer name machted with Certificate7)
    |--Certificate9 (issuer name machted with Certificate7)

Class Certificate looks like

public class Certificate implements Serializable {
    private static final long serialVersionUID = 1L;

    private int id;
    private String name;
    private boolean ca;
    private String issuerName;
    ...

In next step want some add/remove/edit functionality on this view.

Can anyone guide me how can i achieve this???

Upvotes: 0

Views: 645

Answers (1)

Navaneeth
Navaneeth

Reputation: 126

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TreeTableView;
import javafx.stage.Stage;

public class TreeTableSampleApp extends Application {

@Override public void start(Stage primaryStage) {
    primaryStage.setTitle("TreeTable View Sample");
    primaryStage.setScene(new Scene(new TreeTableSample()));
    primaryStage.sizeToScene();
    primaryStage.show();
    TreeTableView<?> treeTableView = (TreeTableView<?>) primaryStage.getScene().getRoot().lookup(".tree-table-view");
    treeTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
}

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


   import java.util.Arrays;
import java.util.List;

import ensemble.Sample;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.layout.Pane;

    public class TreeTableSample extends Pane {

        List<Employee> employees = Arrays.<Employee> asList(new Employee("Ethan Williams", "[email protected]"),
                new Employee("Emma Jones", "[email protected]"), new Employee("Michael Brown", "[email protected]"),
                new Employee("Anna Black", "[email protected]"), new Employee("Rodger York", "[email protected]"),
                new Employee("Susan Collins", "[email protected]"));

        final TreeItem<Employee> root = new TreeItem<>(new Employee("Sales Department", ""));

        public TreeTableSample() {
            root.setExpanded(true);
            employees.stream().forEach((employee) -> {
                root.getChildren().add(new TreeItem<>(employee));
            });

            TreeTableColumn<Employee, String> empColumn = new TreeTableColumn<>("Employee");
            empColumn.setPrefWidth(150);
            empColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures<Employee, String> param) -> new ReadOnlyStringWrapper(
                    param.getValue().getValue().getName()));

            TreeTableColumn<Employee, String> emailColumn = new TreeTableColumn<>("Email");
            emailColumn.setPrefWidth(190);
            emailColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures<Employee, String> param) -> new ReadOnlyStringWrapper(
                    param.getValue().getValue().getEmail()));

            TreeTableView<Employee> treeTableView = new TreeTableView<>(root);
            treeTableView.getColumns().setAll(empColumn, emailColumn);
            getChildren().add(treeTableView);
        }

        public class Employee {

            private SimpleStringProperty name;
            private SimpleStringProperty email;

            public SimpleStringProperty nameProperty() {
                if (name == null) {
                    name = new SimpleStringProperty(this, "name");
                }
                return name;
            }

            public SimpleStringProperty emailProperty() {
                if (email == null) {
                    email = new SimpleStringProperty(this, "email");
                }
                return email;
            }

            private Employee(String name, String email) {
                this.name = new SimpleStringProperty(name);
                this.email = new SimpleStringProperty(email);
            }

            public String getName() {
                return name.get();
            }

            public void setName(String fName) {
                name.set(fName);
            }

            public String getEmail() {
                return email.get();
            }

            public void setEmail(String fName) {
                email.set(fName);
            }
        }

    }

Upvotes: 0

Related Questions