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
SwiftUI 如何获取对 List 内编辑 Textfield 的参考?