Ответ 1
AFAIK, чтобы обернуть text
в label
, вы должны определить width
для этой метки, потому что ссылаясь на setWrapText (Boolean):
public final void setWrapText (логическое значение)
Устанавливает значение свойства wrapText.
Описание свойства:Если пробег текста превышает ширину метки, то эта переменная указывает, должен ли текст переноситься на другую строку.
Здесь выражение превышает ширину маркированного, которое вы уже определили width
для вашего label
, поэтому вы не можете использовать его, если нет width
.
Итак, ваш код должен быть:
Label label = new Label("This text should wrap because it is too long");
label.setMaxWidth(150);
label.setWrapText(true);
Другой альтернативой является использование Текстовый элемент вместо label
и использовать метод setWrappingWidth()
вот так:
Text t = new Text("This text should wrap because it is too long" );
t.setWrappingWidth(150);
И вы получите этот результат:
Вывод:
Чтобы обернуть текст (либо в элементе label
, либо в элементе text
), вы должны определить ширину, чтобы текст возвращался к новой строке, когда мы превышаем эту ширину.
EDIT:
И чтобы сделать его немного более динамичным и не устанавливайте ширину вашей метки, и если вы устанавливаете PrefWidth
на свой borderPane
, вы можете использовать static double WIDTH
, который получит этот PrefWidth
и установите его на MaxWidth
метки, здесь пример кода:
public class LabelWrap extends Application {
static double WIDTH;
public static void main(String[] args) {
launch(LabelWrap.class);
}
@Override
public void start(Stage stage) throws Exception {
BasicControl basicControl = new BasicControl();
BorderPane borderPane = new BorderPane();
borderPane.setPrefWidth(150);
borderPane.setCenter(basicControl);
//get the PrefWidth value in the WIDTH attribute
WIDTH = borderPane.getPrefWidth();
stage.setScene(new Scene(borderPane));
stage.centerOnScreen();
stage.show();
}
private static class BasicControl extends Control {
@Override
protected Skin<?> createDefaultSkin() {
return new BasicControlSkin(this);
}
}
private static class BasicControlSkin extends SkinBase<BasicControl> {
protected BasicControlSkin(BasicControl control) {
super(control);
VBox box = new VBox();
Label label = new Label("This text should wrap because it is too long");
//set the WIDTH value to the label MaxWidth
label.setMaxWidth(WIDTH);
label.setWrapText(true);
box.getChildren().add(label);
this.getChildren().add(box);
}
}
}