TableView:填充可编辑的 TextField 容器

问题描述

经过数小时的阅读和尝试,我一直在努力在 TableView 中填充可编辑的 TextField 容器。

我已经设法将自定义对象的 ObservableList 中的数据显示到我的 TableView 实例中。

我已经尝试过这个命令:

spalteTag.setCellFactory(TextFieldTableCell.forTableColumn(spalteTag));

但是这会产生错误,而这种类型的代码

spalteIstErledigt.setCellFactory(CheckBoxTableCell.forTableColumn(spalteIstErledigt));

工作正常。

package sample;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.util.converter.NumberStringConverter;
import tabellen.MysqLController;
import tabellen.TabelleKabelzug;


public class mainController {

    ObservableList<TabelleKabelzug> oListeKabelzug = FXCollections.observableArrayList();

    @FXML
    private TableView tableViewKabelzug = new TableView();

    @FXML
    private TableColumn<TabelleKabelzug,Integer> spalteId = new TableColumn();

    @FXML
    private TableColumn<TabelleKabelzug,Boolean> spalteIstErledigt = new TableColumn();

    @FXML
    private TableColumn<TabelleKabelzug,String> spalteTag = new TableColumn();

    public void initialize() {
        initialisiereKabelzugliste();
        tableViewKabelzug.setItems(oListeKabelzug);
    }

    public void initialisiereKabelzugliste() {
        MysqLController controller = new MysqLController();
        controller.mitMysqLVerbinden();
        oListeKabelzug.setAll(controller.kabelzuglisteLaden());
        spalteIstErledigt.setCellFactory(CheckBoxTableCell.forTableColumn(spalteIstErledigt));
        spalteTag.setCellFactory(TextFieldTableCell.forTableColumn(spalteTag));
        tableViewKabelzug.setItems(oListeKabelzug);
    }
}

我的 .fxml 文件中的 TableColumn“spalteTag”示例:

<TableColumn fx:id="spalteTag" text="BMK">
   <cellValueFactory>
      <PropertyValueFactory property="tag" />
   </cellValueFactory>
   <cellFactory>
      ??? <-- Any code in here possible?                                             
   </cellFactory>
</TableColumn>

这是目前的示例(当然没有任何错误): TableView with populated data and Checkboxes

所以我现在的 3 个问题是: 首先,如何在专用于 String 值的每个 TableView 单元格中添加 TextFields? 其次,如何使每个 TableView 单元格的这些 TextField 都可编辑? 第三,在我的 .fxml 文件中是否有任何可能的设置? (这对我来说是最方便的解决方案)

来自德国的问候:)

解决方法

您不必将参数传递给 forTableColumn 函数。 试试这个

spalteTag.setCellFactory(TextFieldTableCell.forTableColumn());