Добавление контекстного меню в 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()
решил проблему.