2014-11-06 84 views
0

我的問題是: 我做了一個組合框,我想在它的元素上使用上下文菜單,所以當我設置如下所示的cellfactory時,我看不到任何更多的項目並且上下文菜單不顯示。javafx combobox contextmenu not diplayed

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

由於未在ListCell中設置文字,因此看不到項目。你可以用一行代碼來做到這一點:

cell.textProperty().bind(cell.itemProperty()); 

上下文菜單更棘手,我沒有真正的解決方案。問題是ComboBox使用PopupControl顯示列表視圖,並且彈出控件的autoHide設置爲true。所以當你點擊列表視圖時,彈出關閉(阻止你看到上下文菜單)。沒有辦法訪問彈出控件,所以我不認爲會有任何方式來做到這一點。

在組合框中註冊一個上下文菜單似乎是一件不尋常的事情;我想知道你想做什麼有更好的方法。 A MenuButton在某些方面類似於ComboBox(顯示帶選項的彈出窗口的控件),但它具有菜單層次結構,因此可以包含級聯菜單。這可能會提供您想要的功能。