在JavaFX中向tableview添加元素不会';行不通
我想将JSON Rest Web服务中的元素添加到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
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
传递您的教师列表,使您的代码更容易一些。