2016-05-27 11 views
0

Ich habe Probleme mit einer Spalte in TableView. Ich bekomme Daten mit JSON. Abfrage:Kein Ergebnis in TableView

[{"idmarks":3,"idusers":1,"mark":8.0,"test":{"date":"2016-01-01T12:34:59+01:00","idtests":2,"title":"test 2"}},{"idmarks":4,"idusers":1,"mark":4.0,"test":{"date":"2014-01-01T11:11:11+01:00","idtests":3,"title":"test 111"}}] 

Code:

@FXML 
private void action(){ 
    ObjectMapper mapper = new ObjectMapper(); 
    List<Marks> lista = null; 
    String path = "http://localhost:8080/Server/source/users/1/marks"; 
    try { 
     lista = mapper.readValue(new URL(path), new TypeReference<List<Marks>>(){}); 
    } catch (IOException ex) { 
     System.out.println(ex); 
    } 

    ObservableList<Marks> lis = FXCollections.observableArrayList(lista); 
    table.setItems(lis); 

    TableColumn<Marks, String> first = new TableColumn<Marks,String>("Mark"); 
    first.setCellValueFactory(new PropertyValueFactory("mark")); 
    TableColumn<Marks,String> second = new TableColumn<Marks,String>("Title"); 
    second.setCellValueFactory(new PropertyValueFactory("title")); 

    table.getColumns().setAll(first, second); 
} 

Marks.java

und der Gäste:

TableView

+0

Können Sie die 'Marks' Klasse zeigen? Bitte überprüfen Sie auch, ob die Werte von JSON korrekt gelesen werden ... – fabian

+0

Ja, natürlich. Bitte [Marks.java] (http://pastebin.com/AadPQ4KS) – wolacinio

Antwort

0

Die Bequemlichkeit Implementierung PropertyValueFactory kann eine „Eigenschaft einer Eigenschaft“ nicht abrufen: das heißt es nicht die title Eigenschaft aus dem test Eigentum Ihrer Marks Instanz erhalten. Implementieren Sie die Callback selbst:

second.setCellValueFactory(cellData -> 
    new SimpleStringProperty(cellData.getValue().getTest().getTitle())); 
+0

Perfekt. Danke @James_D – wolacinio

-1

Das Problem mit Ihrem Code ist

TableColumn<Marks, String> first = new TableColumn<Marks,String>("Mark"); 
    first.setCellValueFactory(new PropertyValueFactory("mark")); 

Sie sollten sie aktualisieren mit: -

TableColumn<Marks, String> first = new TableColumn<Marks,String>("Mark"); 
    first.setCellValueFactory(new PropertyValueFactory<Marks,String>("mark")); 

Update, um das gleiche für die zweite Spalte und die Werte in der Tabelle hinzufügen, nachdem Sie die Spalten so eingestellt table.setItems(lis); verwenden, nachdem table.getColumns().setAll(first, second);

, dass Ihr Problem lösen .

Prost

+1

Es ist ** nicht falsch **, den rohen 'PropertyValueFactory'-Typ zu verwenden, es ist nur eine schlechte Übung. Die Informationen über die Typparameter sind sowieso zur Laufzeit nicht relevant ... Es ist auch egal, ob Sie zuerst die Zeilen oder die Spalten hinzufügen ... – fabian

+0

@Chetan Hallan funktioniert immer noch nicht. Vorbereiteter Code ist [hier] (http://pastebin.com/v3G6REPP) – wolacinio

+0

@wolacinio Ich kann die Deklaration für die Tabelle nicht sehen, die Sie in Ihrem Code verwendet haben. Können Sie das angeben? –