JavaFX 2 : word wrapping doesn't work in ScrollPane

标签 java javafx-2

如果我将自动换行设置为标签并将其放在任何布局中 - 自动换行都可以正常工作,除非我将标签放置到 ScrollPane。这是一个例子:

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Test");
    BorderPane borderPane = new BorderPane();
    VBox myView = new VBox();
    Label label = new Label("Lorem ipsum dolor sit amet, consectetur adipisicing elit," +
            " sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim" +
            " ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip" +
            " ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate" +
            " velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat" +
            " cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum");
    label.setWrapText(true);
    myView.getChildren().addAll(label);

    ScrollPane scroll = new ScrollPane();
    scroll.setContent(myView);
    scroll.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);

    borderPane.setCenter(scroll);

    Scene scene = new Scene(borderPane, 300, 400);
    primaryStage.setResizable(false);
    primaryStage.setScene(scene);
    primaryStage.sizeToScene();
    primaryStage.show();
}

有什么方法可以让滚动 Pane 内自动换行吗?

最佳答案

引用 Javadoc :

public final void setWrapText(boolean value)

Property description:

If a run of text exceeds the width of the Labeled, then this variable indicates whether the text should wrap onto another line.

在您的示例中,由于您没有为标签设置大小,它会自动调整大小以适合所有文本。所以 Label 知道您希望他将文本换行,但由于文本适合他的宽度,所以他什么也没做。

现在,如果你为你的标签设置一个 pref 大小,它会强制他包装文本:

    label.setPrefSize(250, 500);

您可以做的(这可能是更好的方法)是告诉您的 ScrollPane 使用 setFitToWidthsetFitToHeight 调整其中组件的大小方法。就像这样:

    scroll.setFitToWidth(true); 

当您调整窗口大小时,Label 将调整大小以适应 ScrollPane 的大小,并且您的文本将相应换行。

另一种实现您想要的方法是使用文本对象而不是标签:

Text text = new Text("Lorem ipsum dolor sit amet, consectetur adipisicing elit," +
            " sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim" +
            " ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip" +
            " ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate" +
            " velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat" +
            " cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum");

    text.setWrappingWidth(250);

关于JavaFX 2 : word wrapping doesn't work in ScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699789/

相关文章:

java - 使用来自在线的 Java 类列表填充 Spinner

java - 打包和部署企业应用程序的现代替代方案?

java - 创建自定义控件以包含其他自定义控件

java - 如何在 Java FX FXML 应用程序中的模型和 View 之间进行通信?

deployment - 部署JavaFX应用程序时出现运行时错误

java - 如何定位我的按钮?

java - 重新启动 OpenShift 应用程序意味着重置它吗?

java - Netbeans - 由于复合主键导致 Glassfish 服务器部署错误

java - JDK8 中使用的 Rhino javascript JSR-223-wrapper 在哪里?

javafx - 使用 fxml 文件设置 anchorPane 的内容