Добавление контекстного меню в TableView, разработанное с использованием ObservableMap в JAVAFX

Я создал таблицу, используя ObservableMap вместо ObservableList. Вы можете увидеть код (не написанный мной) здесь. Теперь мне нужно добавить контекстное меню в каждую строку. Поэтому я написал код, как показано ниже:

public MapTableView<String, LineItem> initialize(MapTableView<String, LineItem> tableView) {

    tableView.setRowFactory((TableView<Entry<String, LineItem>> tableView1) -> {

        final TableRow<Entry<String, LineItem>> row = new TableRow<>();
        final ContextMenu contextMenu = new ContextMenu();
        final MenuItem cancelMenuItem = new MenuItem("Cancel");
        cancelMenuItem.setOnAction((ActionEvent event) -> {

           LineItem item  =  tableView1.getSelectionModel().getSelectedItem().getValue();
           System.out.println(item.getLineNo()); // gives me null
            });

        });

        contextMenu.getItems().add(cancelMenuItem);

        // Set context menu on row, but use a binding to make it only show for non-empty rows:
        row.contextMenuProperty().bind(Bindings.when(row.emptyProperty()).then((ContextMenu) null)
                .otherwise(contextMenu)
        );  tableView1.setContextMenu(contextMenu);
        return row;
    });

    return tableView;
}

На самом деле он получает порядок из таблицы, но когда я обращаюсь к переменным объекта, он дает мне "ноль". Я не мог понять, что я делаю неправильно. Пожалуйста, помогите мне с этим. Более того, я инициализирую таблицу:

tableView.setEditable(false);
tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);

Должен ли я использовать что-то вроде:

tableView.getSelectionModel().setCellSelectionEnabled(true);

Все работает нормально, но когда я пытаюсь получить доступ к переменным "элемента", я получаю "Исключение нулевого указателя", поскольку значения равны нулю, но объект не равен нулю. Заранее спасибо.

1 ответ

Решение

Как сказал @James_D, используя

LineItem item = row.getItem().getValue() решил проблему.

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