JavaFX TableColumn文本包装

Ste*_*eve 11 java javafx tableview javafx-2

我在调整包含围绕TableCell项目的文本项的TableView时遇到问题.调整大小时,隐藏的值会调整大小,但可见项不会重新计算文本换行.

问题.

红色框中的推文在调整大小期间被隐藏,并按预期调整文本包装.在调整大小阶段期间,框上方的推文可见,并且仍然具有旧的包装.

下面是我调整大小阶段的代码.

fxSearchResultsTableTweet.setCellFactory(new Callback<TableColumn<Status, String>, TableCell<Status, String>>() {
        @Override
        public TableCell<Status, String> call(TableColumn<Status, String> arg0) {
            return new TableCell<Status, String>() {
                private Text text;

                @Override
                public void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
                    if (!isEmpty()) {
                        text = new Text(item.toString());
                        text.setWrappingWidth(fxSearchResultsTableTweet.getWidth());
                        this.setWrapText(true);

                        setGraphic(text);
                    }
                }
            };
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Jam*_*s_D 15

这更接近,但不是很好:

    textCol.setCellFactory(new Callback<TableColumn<Status, String>, TableCell<String, String>>() {

        @Override
        public TableCell<Status, String> call(
                TableColumn<Status, String> param) {
            TableCell<Status, String> cell = new TableCell<>();
            Text text = new Text();
            cell.setGraphic(text);
            cell.setPrefHeight(Control.USE_COMPUTED_SIZE);
            text.wrappingWidthProperty().bind(cell.widthProperty());
            text.textProperty().bind(cell.itemProperty());
            return cell ;
        }

    });
Run Code Online (Sandbox Code Playgroud)

在2.2中,当您向表中添加新项目时显示错误的高度,然后在调整大小时正确调整单元格的大小.在8它几乎完美,似乎在添加第一个项目后失败(至少在我的模型中).

如评论中所述,

textCol.setCellFactory(tc -> {
    TableCell<Status, String> cell = new TableCell<>();
    Text text = new Text();
    cell.setGraphic(text);
    cell.setPrefHeight(Control.USE_COMPUTED_SIZE);
    text.wrappingWidthProperty().bind(textCol.widthProperty());
    text.textProperty().bind(cell.itemProperty());
    return cell ;
});
Run Code Online (Sandbox Code Playgroud)

似乎工作得更好.

  • 如果将Text的宽度绑定到列widthProperty而不是cell.widthProperty,它就像魅力一样.只需替换"text.wrappingWidthProperty().bind(cell.widthProperty());" "text.wrappingWidthProperty().bind(textCol.widthProperty());" (10认同)