我有一個ListView
,我正在努力添加一個ContextMenu
。我有ContextMenu
工作發現,但有另一個問題。ListView CellFactory - 如何正確刪除單元格?
我setCellFactory
代碼,用於設置上下文菜單:
lvAppetites.setCellFactory(lv -> {
ListCell<Appetite> cell = new ListCell<>();
ContextMenu contextMenu = new ContextMenu();
MenuItem editAppetiteMenu = new MenuItem();
editAppetiteMenu.textProperty().bind(Bindings.format("Edit ..."));
editAppetiteMenu.setOnAction(event -> {
// Code to load the editor window
editAppetite(cell.getItem());
});
contextMenu.getItems().add(editAppetiteMenu);
MenuItem deleteAppetiteMenu = new MenuItem();
deleteAppetiteMenu.textProperty().bind(Bindings.format("Delete ..."));
deleteAppetiteMenu.setOnAction(event -> {
// Code to delete the appetite
});
contextMenu.getItems().add(deleteAppetiteMenu);
contextMenu.getItems().add(new SeparatorMenuItem());
MenuItem addAppetiteMenu = new MenuItem();
addAppetiteMenu.textProperty().bind(Bindings.format("Add New ..."));
addAppetiteMenu.setOnAction(event -> {
// Code to delete the appetite
});
contextMenu.getItems().add(addAppetiteMenu);
cell.textProperty().bind(cell.itemProperty().asString());
// If nothing selected, remove the context menu
cell.emptyProperty().addListener((obs, wasEmpty, isNowEmpty) -> {
if (isNowEmpty) {
cell.setContextMenu(null);
} else {
cell.setContextMenu(contextMenu);
}
});
return cell;
});
我ListView
是通過與一個監聽一個TextField
搜索;當用戶輸入時,監聽器會過濾ListView
中的項目。
現在的問題是,隨着列表被過濾,任何空單元現在顯示null
。
從閱讀另一個question,我相當確信ListView
仍然顯示刪除單元格的圖形。我知道如何通過覆蓋updateItem
方法來處理ListView中的內容,但是我將如何從我的setCellFactory
方法中處理此問題呢?
這是甚至可能或將我需要重構我的整個ListView
?
謝謝你一如既往的爲你的所有幫助!
爲什麼不處理更新到項目中'updateItem'支持列表細胞(包括項目清除,因爲他們也登記爲更新)代碼而不是試圖在單元工廠內聯線?重寫'updateItem'並處理任何邏輯將會有「標準」的方式來完成,而不是通過綁定和監聽器。 – jewelsea