(有already is a question regarding this,但它没有答案,评论也无济于事。)
我有一个TableView,我想要一个包含多行标签的列,我可以编辑。理想情况下,行为类似于TextFieldTableCell
但具有多行支持:
TextField
(或在本例中为TextArea
),以便对文字进行修改。我还没有找到解决方案。我现在唯一的解决方法是将TextArea
作为单元格的“图形”:
descriptionTableColumn.setCellFactory(param -> new TableCell<Attachment, String>() {
@Override
protected void updateItem(String item, boolean empty) {
if (empty) {
setGraphic(null);
} else {
TextArea area = new TextArea(item);
area.setMinHeight(USE_COMPUTED_SIZE);
area.setPrefHeight(USE_COMPUTED_SIZE);
area.setMaxHeight(USE_COMPUTED_SIZE);
setGraphic(area);
}
}
});
(此处缺少用于收听文本更改的代码;它不会触发OnEditCommit
事件。)
但是,TextArea
始终呈现为带有边框和白色背景的普通TextArea
。我可以忍受这一点。但即使我设置USE_COMPUTED_SIZE
,该区域也总是以一定的高度(大约180px)渲染,即使我设置了TextFieldTableCell
。
所以问题是:
TextArea
?答案 0 :(得分:7)
好的,基本的想法是复制TextFieldTableColumn
并调整其行为以创建TextAreaTableColumn
。我一起攻击了一个小的工作示例实现:https://gist.github.com/eckig/30abf0d7d51b7756c2e7
用法:
TableColumn<?, ?> column = new TableColumn<>();
column.setCellValueFactory(...);
column.setCellFactory(TextAreaTableCell.forTableColumn()); // add StringConverter if neccessary
tableView.getColumns().add(column);
但是,还有一些事情需要实施/调整:
但希望你能得到这个想法; - )