首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX TableColumn文本换行

JavaFX TableColumn文本换行
EN

Stack Overflow用户
提问于 2014-03-29 21:57:40
回答 2查看 16.3K关注 0票数 12

在调整包含环绕TableCell项的文本项的TableView时,我遇到了一个问题。调整大小时,隐藏值将调整大小,但可见项不会重新计算文本换行。

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

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

代码语言:javascript
复制
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);
                    }
                }
            };
        }
    });
}

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-29 23:04:14

这个比较接近,但不是很好:

代码语言:javascript
复制
    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 ;
        }

    });

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

正如评论中所指出的,

代码语言:javascript
复制
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 ;
});

看起来效果更好。

票数 18
EN

Stack Overflow用户

发布于 2019-06-06 15:21:18

只需在每个列的表上添加单元工厂即可。它应该在将数据添加到表视图之前添加。它对我来说工作得很好。

代码语言:javascript
复制
    yourTableColumn.setCellFactory(param -> {
        return new TableCell<YourDataClass, String>() {
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);

                if (item == null || empty) {
                    setText(null);
                    setStyle("");
                } else {
                    Text text = new Text(item);
                    text.setStyle("-fx-text-alignment:justify;");                      
                    text.wrappingWidthProperty().bind(getTableColumn().widthProperty().subtract(35));
                    setGraphic(text);
                }
            }
        };
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22732013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档