В Java FX, как можно нарисовать текст, начиная с верхнего левого угла (вместо нижнего левого)? - PullRequest
2 голосов
/ 26 сентября 2019

Используя Java FX, текстовые координаты x и y относятся к нижнему левому углу текста.Как сделать так, чтобы координаты ссылались на верхний левый угол?Например, если текст рисуется в начале координат (0,0), он выводится за пределы экрана, но в этом случае мы хотим, чтобы он отображался в верхнем левом углу.

public class JavaFxOriginText extends Application  {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Group root = new Group();
        Scene scene = new Scene(root, 100, 50, Color.WHITE);
        primaryStage.setScene(scene);
        primaryStage.show();

        for(int i=0; i<5; i++) {
            Text text = new Text(0, i*10, "Hello World! " + i);
            text.setFill(Color.BLACK);
            root.getChildren().add(text);
        }
    }
}

Этот фрагмент кода показывает enter image description here

Но на экране отсутствует «Hello World! 0».

Ответы [ 2 ]

4 голосов
/ 26 сентября 2019

Установить текстовое начало на VPos.TOP (по умолчанию VPos.BASELINE):

Text text = new text(15, 0, "The Thirty-Nine Steps");
text.setTextOrigin(VPos.TOP);

Определяет начало текстовой системы координатв локальных координатах.

Возможно, вы также захотите установить для типа текстовых границ значение TextBoundsType.VISUAL (по умолчанию TextBoundsType.LOGICAL):

text.setBoundsType(TextBoundsType.VISUAL);

Геометрия текста может быть измерена либо в терминах границ конкретного отображаемого текста - визуальных границ, либо в качестве свойств шрифта и отображаемых символов - логических границ.Визуальные границы более полезны для позиционирования текста в виде графики и для получения жестких границ вокруг текста.

0 голосов
/ 26 сентября 2019

Я согласен с @Slaw & @Zephyr.

Просто альтернативная мысль: если OP больше заботится о рисовании / позиционировании текста (т.е. не всегда вертикально), то основной проблемой является использование Group в качестве корневого узла.Не мешая вашему рисунку, если вы поместите группу в стек, я думаю, вы получите желаемое поведение.

public class JavaFxOriginText extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Group root = new Group();
        StackPane mainRoot = new StackPane(root);
        mainRoot.setAlignment(Pos.TOP_LEFT);
        Scene scene = new Scene(mainRoot, 100, 50, Color.WHITE);
        primaryStage.setScene(scene);
        primaryStage.show();

        for (int i = 0; i < 5; i++) {
            Text text = new Text(0, i * 10, "Hello World! " + i);
            text.setFill(Color.BLACK);
            root.getChildren().add(text);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...