Изменение размера TextFlow для идеального связывания текста при изменении размера шрифта - PullRequest
0 голосов
/ 20 марта 2020

У меня есть элемент TextFlow поверх StackPane, и он заполнен 8 строками текста длиной 80 символов. Я пытаюсь добавить возможность изменять размеры шрифта и увеличивать или уменьшать TextFlow в соответствии с изменением размера шрифта. Если я уменьшу размер шрифта, TextFlow будет вести себя как положено. Если я увеличу размер шрифта, начальный перенос текста и его размер будут искажены.

    public List<Text> lines = new ArrayList<>();

    public void testTerminal()
    {

        for (int x = 0; x < 8; x++)
        {
            Text t = new Text("123567890123456789012345678901234567890123567890123456789012345678901234567890\n");
            t.setFont(Font.font("Monospaced", 14));
            t.setFill(Color.WHITE);
            t.setWrappingWidth(Double.MAX_VALUE);
            lines.add(t);
        }

        this.terminal.getChildren().addAll(lines);

        terminal.setMinHeight(lines.get(0).getBoundsInLocal().getHeight()*8.0);
        terminal.setMaxHeight(lines.get(0).getBoundsInLocal().getHeight()*8.0);

        terminal.setMinWidth(lines.get(0).getBoundsInLocal().getWidth());
        terminal.setMaxWidth(lines.get(0).getBoundsInLocal().getWidth());
    }

    public void changeFontSize(int size)
    {


        // grow the TextFlow much larger than it should need to be
        // for the new font size.
        terminal.setMinHeight(lines.get(0).getBoundsInLocal().getHeight()*16.0);
        terminal.setMaxHeight(lines.get(0).getBoundsInLocal().getHeight()*16.0);

        terminal.setMinWidth(lines.get(0).getBoundsInLocal().getWidth()*10);
        terminal.setMaxWidth(lines.get(0).getBoundsInLocal().getWidth()*10);


        for (Text t: lines)
        {
            t.setFont(Font.font("Monospaced", size));
        }

        terminal.setMinHeight(lines.get(0).getBoundsInLocal().getHeight()*8.0);
        terminal.setMaxHeight(lines.get(0).getBoundsInLocal().getHeight()*8.0);

        terminal.setMinWidth(lines.get(0).getBoundsInLocal().getWidth());
        terminal.setMaxWidth(lines.get(0).getBoundsInLocal().getWidth());

    }

Поскольку проблема возникает только при увеличении размера шрифта, я предположил, что мне придется увеличить TextFlow до изменения размера приложенные тексты. Это не сработало. Я также попытался сделать фиктивный текст с новым размером и использовать эти размеры. Не могу заставить его работать. Любой совет?

Изображения: Initial Render

image Decrease Font Size">

image Increase Font Size">

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...