JavaFX 文本流 overflow hidden 文本(剪辑或省略号)

标签 java javafx

在我的应用程序中,我使用最多包含三个 Text 子级的 TextFlow。当文本溢出时,文本会分成多行(这就是我所理解的“文本换行”,我猜这是我不想要的?)。我需要文本流来剪辑溢出的文本。对于 Labeled-fx-text-overrun style 属性 - 值剪辑或省略号对我来说很好,但这不适用于 Text-Flow 。我尝试将 TextFlow 的 pref-Width 设置为 Region.USE_COMPUTED_SIZE,如建议的 here但这没有帮助,而且似乎迫使 TextFlow 将文本换行为多行。
我该怎么办?

我使用 TextFlow(而不是 Label),因为 TextFlow 内的 Text 对象需要采用不同的样式(中间的文本需要加粗)。 TextFlow 是否有更好的替代方案可以让我剪辑溢出的文本?

这是一个例子:

public class TestApplication extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        TextFlow example = new TextFlow();
        example.getChildren().addAll(new Text("A very long text."), new Text("So long that will wrap, if it's parent is too small."), new Text("But instead the overrun text should be clipped."));
        example.setPrefWidth(Region.USE_COMPUTED_SIZE);
        example.setStyle("-fx-font-size: 14px");

        HBox wrapper = new HBox(example);
        wrapper.setMaxWidth(30);
        wrapper.setStyle("-fx-border-color: black");

        HBox root = new HBox(wrapper);
        Scene scene = new Scene(root, 500, 500);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

最佳答案

将 FlowPane 的换行宽度设置为 Double.MAX_VALUE 似乎可以防止换行。

要剪切文本,您可以创建一个矩形,将其宽度和高度绑定(bind)到 FlowPane 的宽度和高度,然后将其传递给 FlowPane 的 setClip 方法。

FlowPane wrapper = new FlowPane(example);
wrapper.setPrefWrapLength(Double.MAX_VALUE);

Rectangle rect = new Rectangle();
rect.widthProperty().bind(wrapper.widthProperty());
rect.heightProperty().bind(wrapper.heightProperty());
wrapper.setClip(rect);

关于JavaFX 文本流 overflow hidden 文本(剪辑或省略号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59705403/

相关文章:

JavaFX 在服务器端创建文件

java - 针对特定项目的 Android Lint 检查

java - hibernate中的同步是什么意思

java - 如何打印javafx Pane ?

javafx - ScrollPane.setVvalue() 不会更新 javafx 中的滚动条

javafx - 在 JavaFx 的 BorderPane 中间居中一个 vBox

JavaFX - 工具栏按钮上消失的图标

Java - 同步方法无法正常工作

java - Stax 未检测到结束元素

java - 仅在平板电脑上发生 Android 致命异常