如何将ComboBoxTableCell放在TableView中?

如何将ComboBoxTableCell放在TableView中?,combobox,javafx,tableview,tablecell,Combobox,Javafx,Tableview,Tablecell,我想把一个组合框放在一个表格单元格里,但我做不到。代码是下一个: private void cargaTablaDesglose() { TableColumn<Map, String> column1 = new TableColumn<>(Desglose1); TableColumn<Map, String> column2 = new TableColumn<>(Desglose2); TableColumn<

我想把一个组合框放在一个表格单元格里,但我做不到。代码是下一个:

private void cargaTablaDesglose() {
    TableColumn<Map, String> column1 = new TableColumn<>(Desglose1);
    TableColumn<Map, String> column2 = new TableColumn<>(Desglose2);
    TableColumn<Map, String> column3 = new TableColumn<>(Desglose3);

    column1.setCellValueFactory(new MapValueFactory(Desglose1));
    column1.setMaxWidth(0);
    column2.setCellValueFactory(new ComboBoxTableCell.forTableColumn(null));
    column2.setPrefWidth(150);
    column3.setCellValueFactory(new MapValueFactory(Desglose3));
    column3.setPrefWidth(250);

    if (CUOD.modifyData()) {
        column2.setOnEditCommit((TableColumn.CellEditEvent<Map, String> t) -> {
            actualizaObra(t.getRowValue(), t.getNewValue());
        });
            }

    tablaDesglose.getItems().clear();
    tablaDesglose.setEditable(true);
    tablaDesglose.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    tablaDesglose.getSelectionModel().setCellSelectionEnabled(false);
    tablaDesglose.getColumns().clear();
    tablaDesglose.getColumns().addAll(column1, column2, column3);

    Callback<TableColumn<Map, String>, TableCell<Map, String>> cellFactoryMap
            = CUCF.getFactoryMap();
    column1.setCellFactory(cellFactoryMap);
    column2.setCellFactory(cellFactoryMap);
    column3.setCellFactory(cellFactoryMap);
}
private void cargatabladesgloss(){
TableColumn column1=新的TableColumn(Desglose1);
TableColumn column2=新的TableColumn(Desglose2);
TableColumn column3=新的TableColumn(Desglose3);
第1列:setCellValueFactory(新MapValueFactory(Desglose1));
第1列。设置最大宽度(0);
column2.setCellValueFactory(新的ComboBoxTableCell.forTableColumn(null));
第2列:设置宽度(150);
第3列:setCellValueFactory(新MapValueFactory(Desglose3));
第3列:设置宽度(250);
if(CUOD.modifyData()){
column2.setOnEditCommit((TableColumn.CellEditEvent t)->{
(t.getRowValue(),t.getNewValue());
});
}
tabladesgloss.getItems().clear();
tablaDesglose.setEditable(真);
tabladesgloss.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
tabladesgloss.getSelectionModel().setCellSelectionEnabled(false);
tabladesgloss.getColumns().clear();
tabladesgloss.getColumns().addAll(第1列、第2列、第3列);
回调cellFactoryMap
=CUCF.getFactoryMap();
第1列:setCellFactory(cellFactoryMap);
第2列:setCellFactory(cellFactoryMap);
第3列:setCellFactory(cellFactoryMap);
}

它说找不到ComboBoxTableCell的forTableColumn方法。问题的一部分是您试图将单元格工厂设置为TableColumn的单元格值工厂字段。请尝试以下方法:

ObservableList<String> cbValues = FXCollections.observableArrayList("1", "2", "3");

TableColumn<Map, String> column2 = new TableColumn<>(Desglose2);
column2.setCellFactory(ComboBoxTableCell.forTableColumn(new DefaultStringConverter(), cbValues));
ObservableList cbValues=FXCollections.observableArrayList(“1”、“2”、“3”);
TableColumn column2=新的TableColumn(Desglose2);
column2.setCellFactory(ComboBoxTableCell.forTableColumn(新的DefaultStringConverter(),cbValues));

forTableColumn
方法是静态的。您应该调用它
ComboBoxTableCell.forTableColumn(null)
,并在其中传递有效参数(如字符串转换器和用于创建combobox的集合)。我创建了一个ObservableList、一个数组和一个列表,但它不起作用。请尝试将这个简单的示例插入到代码中,并检查它是否起作用:
column2.setCellFactory(ComboBoxTableCell.forTableColumn(新的DefaultStringConverter(),FXCollections.observableArrayList(“1”、“2”、“3”));
您必须在ComboxTableCell之前删除第一个DefaultStringConverter()。因为…它工作得非常好。谢谢!