2017-03-03 6 views
0

Ich bin neu in Java 8 Welt (mit Lambdas, Funktionen etc,) und den Aufbau einer JavaFX 8 Anwendung, ich habe Schwierigkeiten, das Datenmodell (TreeItem) für TreeTableView zu bauen. Die Daten werden aus der Datenbank als ObservableList<Certificate> abgerufen. Ein Zertifikatobjekt mit ca=true könnte Kinder haben, die von issuerName Feld verfolgt werden könnten. Mein Ziel ist es, eine TreeTableView mit verschiedenen Spalten zu bauen, in denen Zertifikate dargestellt werden alsTreeTableView Datenmodell

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) 

Klasse Certificate aussieht

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

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

Im nächsten Schritt wollen einige hinzufügen/entfernen/bearbeiten Funktionalität auf dieser Ansicht.

Kann mir jemand helfen, wie kann ich das erreichen ???

Antwort

0
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); 
      } 
     } 

    }