【问题标题】:How to put ComboBoxTableCell in a TableView?如何将 ComboBoxTableCell 放在 TableView 中?
【发布时间】:2014-05-08 09:06:21
【问题描述】:

我正在尝试将 ComboBox 放入表格单元格中,但我不能。代码是下一个:

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);
}

说找不到ComboBoxTableCell的forTableColumn方法

【问题讨论】:

  • forTableColumn 方法是静态的。您应该将其命名为 ComboBoxTableCell.forTableColumn(null) 并在其中传递有效参数(如字符串转换器和用于创建组合框的集合)。
  • 我创建了一个 ObservableList、一个数组、一个列表,但它不起作用。
  • 尝试将这个简单的示例插入您的代码并检查它是否有效:column2.setCellFactory(ComboBoxTableCell.forTableColumn(new DefaultStringConverter(), FXCollections.observableArrayList("1", "2", "3")));

标签: combobox javafx tableview tablecell


【解决方案1】:

问题的一部分是您试图将单元格工厂设置为TableColumn 的单元格值工厂字段。试试这个:

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

TableColumn<Map, String> column2 = new TableColumn<>(Desglose2);
column2.setCellFactory(ComboBoxTableCell.forTableColumn(new DefaultStringConverter(), cbValues));

【讨论】:

  • 你必须在 ComboBoxTableCell.for... 之前删除第一个 DefaultStringConverter() 并且它工作得很好。谢谢!
猜你喜欢
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多