在JavaFX中向tableview添加元素不会';行不通

在JavaFX中向tableview添加元素不会';行不通,javafx,tableview,Javafx,Tableview,我想将JSON Rest Web服务中的元素添加到JavaFX中的TableView中。尽管ArrayList包含正确的元素,但TableView只显示列名,不显示行 这是我的密码: private Client client = ClientBuilder.newClient(); private Gson g = new Gson(); private ArrayList<Schueler> schueler = new ArrayList<Schueler

我想将JSON Rest Web服务中的元素添加到JavaFX中的TableView中。尽管
ArrayList包含正确的元素
,但TableView只显示列名,不显示行

这是我的密码:

private Client client = ClientBuilder.newClient();
    private Gson g = new Gson();
    private ArrayList<Schueler> schueler = new ArrayList<Schueler>();
    private ArrayList<Lehrer> lehrer = new ArrayList<Lehrer>();
    private final String REST_SERVICE_URL = "http://localhost:8080/A07_Webservice/rest/ManagementService";

    @FXML
    private TableView<Schueler> tblSchueler;
    @FXML
    private TableColumn<Schueler, String> lastnameCol;
    @FXML
    private TableColumn<Schueler, String> idCol;
    @FXML
    private TableColumn<Schueler, String> firstnameCol;
    @FXML
    private TableColumn<Schueler, String> birthdateCol;
    @FXML
    private TableColumn<Schueler, String> svnrCol;

    @FXML
    private TableView<Lehrer> tblLehrer;
    @FXML
    private TableColumn<Lehrer, String> svnrLehrerCol;
    @FXML
    private TableColumn<Lehrer, String> firstnameLehrerCol;
    @FXML
    private TableColumn<Lehrer, String> lastnameLehrerCol;
    @FXML
    private Button btnGetSchueler;
    @FXML
    private Button btnGetLehrer;

    @FXML
    public void btnGetSchueler() {
        tblSchueler.getItems().removeAll(tblSchueler.getItems());

        setCellConfigurationsSchueler();

        Type t = new TypeToken<List<Schueler>>() {}.getType();
        String s = client.target(REST_SERVICE_URL).path("schueler").request(MediaType.APPLICATION_JSON).get(String.class);
        List<Schueler> sch = g.fromJson(s, t);
        schueler = (ArrayList<Schueler>) sch;

        for(int i = 0; i < schueler.size(); i++) {
            tblSchueler.getItems().add(schueler.get(i));
        }
    }

    @FXML
    public void btnGetLehrer() {
        tblLehrer.getItems().removeAll(tblLehrer.getItems());

        setCellConfigurationsLehrer();

        Type t = new TypeToken<List<Lehrer>>() {}.getType();
        String s = client.target(REST_SERVICE_URL).path("lehrer").request(MediaType.APPLICATION_JSON).get(String.class);
        List<Lehrer> l = g.fromJson(s, t);
        lehrer = (ArrayList<Lehrer>) l;

        for(int i = 0; i < lehrer.size(); i++) {
            tblLehrer.getItems().add(lehrer.get(i));
        }
    }
private Client=ClientBuilder.newClient();
私有Gson g=新Gson();
private ArrayList schueler=new ArrayList();
private ArrayList lehrer=new ArrayList();
私有最终字符串REST\u服务\u URL=”http://localhost:8080/A07_Webservice/rest/ManagementService";
@FXML
私人桌面视图tblSchueler;
@FXML
私有表列lastnameCol;
@FXML
私有表列idCol;
@FXML
私有表列firstnameCol;
@FXML
私有表列birthdateCol;
@FXML
私有表列svnrCol;
@FXML
私人桌面视图浏览器;
@FXML
私有表列svnrLehrerCol;
@FXML
私有表列firstnamelhrercol;
@FXML
private TableColumn lastnamelehrcol;
@FXML
专用按钮btnGetSchueler;
@FXML
私人按钮;
@FXML
公共无效btnGetSchueler(){
tblSchueler.getItems().removeAll(tblSchueler.getItems());
SetCellConfigurationsChueler();
类型t=newtypetoken(){}.getType();
String s=client.target(REST\u SERVICE\u URL).path(“schueler”).request(MediaType.APPLICATION\u JSON).get(String.class);
List sch=g.fromJson(s,t);
schueler=(ArrayList)sch;
对于(int i=0;i

你知道为什么TableView是空的吗?我打印了arraylist的大小,因此我知道它包含数据

创建列数组并将它们添加到
@FXML private TableView tblSchueler

//Clear
tblSchueler_data = FXCollections.observableArrayList();
tblSchueler.getItems().clear();
tblSchueler.getColumns().clear();

//Add columns
TableColumn tc[] = {
        new TableColumn("Key"),
        new TableColumn("Value")
};

for(int i=0; i<tc.length; i++) {
    final int j = i;
    tc[i].setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
        public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
            return new SimpleStringProperty(param.getValue().get(j).toString());
        }
    });
    Platform.runLater(() -> tblSchueler.getColumns().add(tc[j]));
}

//Add rows
ObservableList<String> row = FXCollections.observableArrayList();
Iterator entries = map.entrySet().iterator();
while(entries.hasNext()) {
    Map.Entry<String,String> s = (Map.Entry<String, String>) entries.next();
    row.add(s.getKey());
    row.add(s.getValue());
    tblSchueler_data.add(row);
}
Platform.runLater(() -> tblSchueler.setItems(tblSchueler_data));
//清除
tblSchueler_data=FXCollections.observableArrayList();
tblSchueler.getItems().clear();
tblSchueler.getColumns().clear();
//添加列
TableColumn tc[]={
新表列(“键”),
新表列(“值”)
};
对于(int i=0;i tblSchueler.getColumns().add(tc[j]));
}
//添加行
ObservableList行=FXCollections.observableArrayList();
迭代器条目=map.entrySet().Iterator();
while(entries.hasNext()){
Map.Entry s=(Map.Entry)entries.next();
添加(s.getKey());
添加(s.getValue());
tblSchueler_数据添加(行);
}
Platform.runLater(()->tblSchueler.setItems(tblSchueler_数据));

您可以发布其他相关代码吗,例如
Lehrer
类和您在列上设置的单元格值工厂?通过将
removeAll
add
替换为
setAll
传递您的教师列表,使您的代码更容易一些。