在我的应用程序中,我使用最多包含三个 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/