簡體   English   中英

如何在JavaFx TableView中顯示值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM