Previously, я задал вопрос, сравнивая координаты SceneBuilder с выходом JavaFX. Я понял, что проблема не лежит в SceneBuilder и экспортированном коде FXML; но это, по сути, проблема с моей машинной версией JavaFX. Тем не менее, я до сих пор неясно, почему это происходит.Координаты JavaFX, инвертированные по оси Y относительно Swing
В моей FXML коде, у меня есть следующая иерархия:
<AnchorPane id="rootPane" pickOnBounds="false" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
<StackPane id="game">
<AnchorPane id="hud" style="-fx-background-color: rgba(0, 0, 0, 0);">
<Text id="ammo" fontSmoothingType="LCD" layoutX="14.0" layoutY="699.0" strokeType="OUTSIDE" strokeWidth="0.0" text="0" wrappingWidth="111.21875">
<font>
<Font name="Brother Deluxe 1350 Font" size="48.0" />
</font>
<effect>
<DropShadow color="#0000007a" height="16.0" offsetY="1.0" radius="5.5" width="8.0" />
</effect>
</Text>
</AnchorPane>
</StackPane>
</AnchorPane>
Это производит следующий вывод IntelliJ:
Как вы можете видеть, координаты Y перевернуты, с 0, 0 находится в левом нижнем углу экрана. Но в SceneBuilder выход - это то, что я обычно ожидал бы:
При необходимости можно найти полный код here.
Мой вопрос: почему мое приложение JavaFX создает интерфейс с 0,0, находящимся внизу слева, а не слева вверху, как показывают мои исследования? И если это возможно, как я могу исправить эту проблему?
Моя операционная система - OS X 10.12, El Capitan. Моя версия JDK - 1.8.0_66.
Почему вы не используете корень FXML ('rootPane') в качестве корневого элемента, а вместо этого завершаете' игру' в новой 'Group'? Это может быть проблематично (не уверен, хотя). – Itai
@sillyfly Это потому, что мне нужна группа, чтобы создать экземпляр «Сцена». – GingerDeadshot
Вы можете создать экземпляр 'Scene' с помощью любого' Parent', а не только 'Group'. Если вы должны использовать 'Group', почему бы не поместить его в FXML? – Itai