JavaFX - HashMap в TableView - PullRequest
       10

JavaFX - HashMap в TableView

0 голосов
/ 31 октября 2018

У меня есть class, который содержит String и HashMap. Я хочу поместить значение string в первый столбец и динамически создавать столбцы, соответствующие размеру HashMap, где его ключами будут имена столбцов, а строки значений.

Итак, в принципе, у меня та же проблема, что и здесь:

Подключение столбцов TableView к значениям HashMap

Однако, попробовав ответ, предоставленный в этом вопросе, я столкнулся с исключением / предупреждением, и каждый раз, когда я пытался обойти это, оно все равно всплывало, и, честно говоря, я вроде бы его терял. Более подробная информация в коде.

Студенческий класс

Class Mark {
    private String studentName;
    private HashMap<String, SimpleDoubleProperty> marks;
    // Getters and setters and whatnot.

Соответствующий код в контроллере Класс

....
@FXML
TableView<Mark> marksTable;
....

    private void loadMarksTable(ObservableList<Mark> marks) {
        marksTable.setItems(marks);
        marksTable.setVisible(true);

        TableColumn<Mark, String> column = new TableColumn<Mark, String>("student name");
        column.setCellValueFactory(cd -> new SimpleStringProperty(cd.getValue().getStudentName()));
        marksTable.getColumns().add(column);

        for (Entry<String, SimpleDoubleProperty> entry: marks.get(0).getMarks().entrySet()) {

            // Instead of Number I tried a lot of things, including Double and SimpleDoubleProperty
            TableColumn<Mark, Number> col = new TableColumn<Mark, Number>(entry.getKey()); 

            /*
             * Warning here (underlines code starting from cd ->) : type mismatch: cannot convert from SimpleDoubleProperty  to ObservableValue<String>
             */
            col.setCellValueFactory(cd -> cd.getValue().getMarks().get(entry.getKey()));
            marksTable.getColumns().add(col);
}

Перед циклом добавления столбцов я пытался создать метод, который бы представлял собой столбец, но при попытке загрузить таблицу NullPointerException появилось бы:

Метод добавления столбцов

private void addColumn(String keyName) {
    TableColumn<Mark, Double> column = new TableColumn<Mark, Double>(keyName);
    column.setCellValueFactory(cd -> cd.getValue().getMarks().get(keyName).asObject()); // <- NullPointerException. Also tried without .asObject()
    marksTable.getColumns().add(column);

Подробное объяснение того, как это работает, будет высоко оценено.

...