Текстовый поток JavaFX скрывает переполненный текст (клип или многоточие) - PullRequest
1 голос
/ 12 января 2020

В своем приложении я использую TextFlow, который содержит до трех Text детей. Когда текст переполняется, текст разделяется на несколько строк (то, что я понял, называется «перенос текста», что, мне кажется, я не хочу?). Мне нужен Text-Flow, чтобы обрезать переполненный текст. Для Labeled есть атрибут стиля -fx-text-overrun - для меня подойдут значения clip или ellipsis, но это недоступно для Text-Flow s. Я попытался установить pref-Width TextFlow на Region.USE_COMPUTED_SIZE, как это предлагается здесь , но это не помогло, а скорее заставляет TextFlow переносить текст на несколько строк.
Что мне делать?

Я использую TextFlow (например, вместо Label), потому что объекты Text внутри TextFlow должны иметь другой стиль (текст в середине должен быть выделен жирным шрифтом) , Может быть, есть лучшая альтернатива ie для 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();
    }
}

1 Ответ

0 голосов
/ 17 января 2020

FlowPane с шириной переноса, установленной на Double.MAX_VALUE, кажется, предотвращает перенос.

Чтобы вырезать текст, вы можете создать прямоугольник, привязать его ширину и высоту к ширине и высоте FlowPane и передать это к методу setClip FlowPane.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...