TableView:填充可编辑的 TextField 容器

Posted

技术标签:

【中文标题】TableView:填充可编辑的 TextField 容器【英文标题】:TableView: Populating editable TextField container 【发布时间】:2021-06-04 08:53:58 【问题描述】:

经过数小时的阅读和尝试,我一直在努力在 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? 其次,如何使这些 TextFields 对每个 TableView 单元格都可编辑? 第三,在我的 .fxml 文件中是否可以进行任何设置? (这对我来说是最方便的解决方案)

来自德国的问候 :)

【问题讨论】:

通过教程学习 a) 如何使用 fxml b) 如何使用 tableView/-Column - 至少阅读并理解您正在使用的类/方法的 api 文档。你的代码在很多地方都是错误的,f.i.手动创建为 fxml 注入注释的字段,实例化一个要加载的控制器(这里有点猜测),不正确的方法调用(如答案和您看到的编译错误中所述:),违反 java 命名约定.. 【参考方案1】:

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

spalteTag.setCellFactory(TextFieldTableCell.forTableColumn());
  

【讨论】:

以上是关于TableView:填充可编辑的 TextField 容器的主要内容,如果未能解决你的问题,请参考以下文章

XLPagerTabStrip 中的可编辑 TableView 作为 childViewController

JavaFx表格视图TableView设置单元格可编辑

JavaFx表格视图TableView设置单元格可编辑

SwiftUI 如何获取对 List 内编辑 Textfield 的参考?

完成在单元格内编辑 textview 后向 tableview 添加另一个单元格

将 UITableView 添加到现有项目:添加数组以填充行时崩溃