(对此已经存在一个问题,但没有答案,评论也无济于事。)
我有一个TableView,我想有一列可以编辑的多行标签。理想情况下,行为类似于a,TextFieldTableCell
但具有多行支持:
TextField
(或在这种情况下为TextArea
),以便可以编辑文本。我还没有找到解决方案。我现在唯一的解决方法是将aTextArea
作为单元格的“图形”:
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
具有边框和白色背景的法线。我可以忍受这一点。但是即使我设置了该区域,即使它为空,该区域也始终以一定的高度(约180像素)进行渲染USE_COMPUTED_SIZE
。
所以问题是:
TextFieldTableCell
?TextArea
唯一的高度根据需要使用?好的,基本思路是复制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);
但是,仍有一些事情需要实现/需要一些调整:
但希望你能明白;-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句