[英]How to show values in a JavaFx TableView
我正在嘗試向TableView中添加一些值,但甚至認為ObservableList obsEvts
更新並具有它應具有的值,但它們沒有正確分配給TableView。
我嘗試了很多事情,在這里看到了很多視頻,教程,問題,但沒有一個解決了我的問題。
我的整個代碼就在這里: https : //github.com/Skwead/Agenda/tree/bugs我的問題僅在Controller
類中,在這些行中: https : //github.com/Skwead/Agenda/blob/efbb594e1ce77fb1e721bc90b0429e719ec87aef /src/sample/Controller.java#L61
public class Controller implements Initializable{
@FXML private TableView<SkEvent> todayTable = new TableView<>();
@FXML private TableColumn<SkEvent, Date> horaTodoCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> estadoTodoCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> tarefaTodoCol = new TableColumn<>();
public void setupEvts(){
ObservableList<SkEvent> obsEvts = FXCollections.observableArrayList(calendarHandler.getToday());
horaTodoCol.setCellValueFactory(new PropertyValueFactory<SkEvent, Date>("date"));
tarefaTodoCol.setCellValueFactory(new PropertyValueFactory<SkEvent, String>("name"));
todayTable.setItems(obsEvts);
todayTable.getColumns().addAll(horaTodoCol, estadoTodoCol ,tarefaTodoCol);
todayTable.getColumns().set(0, horaTodoCol);
todayTable.getColumns().set(2, tarefaTodoCol);
}
}
public class CalendarHandler {
private List<SkEvent> sortedEvts = new ArrayList<>();
public ArrayList<SkEvent> getToday(){
ArrayList<SkEvent> todaySchedule = new ArrayList<>();
for (SkEvent event : sortedEvts) {
if (event.getDate().getDay() == (new Date(LocalDateTime.now().getYear(), LocalDateTime.now().getMonthValue(),
LocalDateTime.now().getDayOfMonth()).getDay())) {
todaySchedule.add(event);
}
}
Collections.sort(todaySchedule, Comparator.comparing(SkEvent::getDate));
return todaySchedule;
}
沒有錯誤顯示,在此方法調用的結尾, todatTable
應該將所有數據包含在obsEvts
。
如果不測試代碼,我會說您的錯誤是在控制器中,您在其中創建新的表列,而不是使用fxml文件中的列。
@FXML private TableView<SkEvent> calendarTable = new TableView<>();
@FXML private TableColumn<SkEvent, Date> horaCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> segCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> terCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> quaCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> quiCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> sexCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> sabCol = new TableColumn<>();
@FXML private TableColumn<SkEvent, String> domCol = new TableColumn<>();
......
.....
這應該是這樣的:
@FXML private TableView<SkEvent> calendarTable;
@FXML private TableColumn<SkEvent, Date> horaCol;
@FXML private TableColumn<SkEvent, String> segCol;
@FXML private TableColumn<SkEvent, String> terCol;
@FXML private TableColumn<SkEvent, String> quaCol;
@FXML private TableColumn<SkEvent, String> quiCol;
@FXML private TableColumn<SkEvent, String> sexCol;
@FXML private TableColumn<SkEvent, String> sabCol;
@FXML private TableColumn<SkEvent, String> domCol;
您正在使用SceneBuilder嗎? 如果是這樣,只需將thouse fxml列名稱提供給SceneBuilder中的列。
您還將在控制器的第30行中第二次實例化表格視圖:
@FXML private TableView<SkEvent> todayTable = new TableView<>();
並將您的列添加到已經在您的fxml中實例化的第二個tableView todayTable中:
todayTable.setItems(obsEvts);
todayTable.getColumns().addAll(horaTodoCol, estadoTodoCol ,tarefaTodoCol);
todayTable.getColumns().set(0, horaTodoCol);
todayTable.getColumns().set(2, tarefaTodoCol);
因此,我的建議是:使用新的TableView <>()和新的TableColumn <>()構造函數調用,以及代碼中的這3行,從控制器中全部刪除:
todayTable.getColumns().addAll(horaTodoCol, estadoTodoCol ,tarefaTodoCol);
todayTable.getColumns().set(0, horaTodoCol);
todayTable.getColumns().set(2, tarefaTodoCol);
讓我知道這是否有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.