我的问题是: 我做了一个组合框,我想在它的元素上使用上下文菜单,所以当我设置如下所示的cellfactory时,我再也看不到这些项目了,上下文菜单也没有显示。
CBXGroups.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
public ListCell<String> call(ListView<String> param) {
final ListCell<String> cell = new ListCell<String>();
final ContextMenu cellMenu = new ContextMenu();
MenuItem rimuoviDalControllo = new MenuItem("RIMUOVI DAL CONTROLLO");
MenuItem rimuoviDefinitivamente = new MenuItem("RIMUOVI DEFINITIVAMENTE");
rimuoviDalControllo.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Service.deleteGroupFromControl(cell.getText(),CBXControllo.getSelectionModel().getSelectedItem());
populateLists();
}
});
rimuoviDefinitivamente.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Service.deleteGroup(cell.getText());
populateLists();
}
});
cellMenu.setOnShowing(new EventHandler<WindowEvent>() {
public void handle(WindowEvent event) {
cell.requestFocus();
}
});
cellMenu.getItems().addAll(rimuoviDalControllo,rimuoviDefinitivamente);
cell.contextMenuProperty().bind(Bindings.when(Bindings.isNotNull(cell.itemProperty())).then(cellMenu).otherwise((ContextMenu) null));
return cell;
}
});
答案 0 :(得分:0)
您无法看到这些项目,因为您尚未在ListCell
中设置文字。您可以使用单行代码执行此操作:
cell.textProperty().bind(cell.itemProperty());
上下文菜单比较复杂,我真的没有解决方案。问题是ComboBox
使用PopupControl
来显示列表视图,弹出控件的autoHide
设置为true。因此,当您单击列表视图时,弹出窗口将关闭(阻止您查看上下文菜单)。没有办法访问弹出控件,所以我认为没有任何办法可以做到这一点。
使用组合框中的项目注册上下文菜单似乎是一件不寻常的事情;我想知道是否有更好的方法来做你想做的事。 MenuButton
在某些方面类似于ComboBox
(控件显示带有选项的弹出窗口),但它有一个菜单层次结构,因此您可以包含级联菜单。这可能会提供您想要的功能。