JavaFX - HashMap в TableView

У меня есть 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);

Было бы очень полезно подробное объяснение того, как это работает.

Предупреждение не должно происходить с объявленными типами. (В частности, ObservableValue<String> не должен использоваться в качестве целевого типа, если второй параметр типа столбца не является String.) Вероятно, ваша IDE не обновилась. Попробуйте очистить и восстановить функциональность среды IDE. Что касается NullPointerException: либо getMarks(), либо getMarks().get(name) возвращает null, это строка, вызывающая исключение; все ли карты содержат одинаковые ключи? Откуда берется name?

fabian 31.10.2018 10:14

@fabian name - это опечатка. Должен быть keyName - редактировал соответственно. Я попробовал очистить и восстановить, и это не сработало. Я пошел дальше и импортировал весь проект в NetBeans, и, как ни странно, это сработало. Я удалил eclipse, переустановил его и загрузил все плагины, затем снова импортировал проект, и он сработал. Значит, причиной этого была ошибка в eclipse? странный. Может это одна из импортированных библиотек? В любом случае, спасибо за помощь, я скоро отправлю ответ.

hman_codes 31.10.2018 15:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
305
0

Другие вопросы по теме