3

如果我将自动换行设置为标签并将其放入任何布局 - 自动换行工作正常,除非我将标签放入 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();
}

有什么方法可以在滚动窗格内进行自动换行吗?

4

1 回答 1

6

引用 Javadoc :

public final void setWrapText(boolean value)

物业说明:

如果一行文本超出了标注的宽度,则此变量指示文本是否应换行到另一行。

在您的示例中,因为您没有为标签设置大小,所以它会自动调整大小以适合所有文本。所以标签明白你想让他换行,但由于文本适合他的宽度,所以他什么也没做。

现在,如果你为你的标签设置一个 pref 大小,它将迫使他换行:

    label.setPrefSize(250, 500);

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

    scroll.setFitToWidth(true); 

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

实现您想要的另一种方法是使用 Text Object 而不是 Label :

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);
于 2013-09-09T13:59:11.037 回答