2016-07-16 2 views
0

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: Java export with inverted Y coordinates

Как вы можете видеть, координаты Y перевернуты, с 0, 0 находится в левом нижнем углу экрана. Но в SceneBuilder выход - это то, что я обычно ожидал бы: SceneBuilder preview with proper Y coordinates

При необходимости можно найти полный код here.

Мой вопрос: почему мое приложение JavaFX создает интерфейс с 0,0, находящимся внизу слева, а не слева вверху, как показывают мои исследования? И если это возможно, как я могу исправить эту проблему?

Моя операционная система - OS X 10.12, El Capitan. Моя версия JDK - 1.8.0_66.

+0

Почему вы не используете корень FXML ('rootPane') в качестве корневого элемента, а вместо этого завершаете' игру' в новой 'Group'? Это может быть проблематично (не уверен, хотя). – Itai

+0

@sillyfly Это потому, что мне нужна группа, чтобы создать экземпляр «Сцена». – GingerDeadshot

+0

Вы можете создать экземпляр 'Scene' с помощью любого' Parent', а не только 'Group'. Если вы должны использовать 'Group', почему бы не поместить его в FXML? – Itai

ответ

1

Был bug с SceneAntialiasing.BALANCED на Mac, который перевернул сцену. Он был подан на основании этого question, и он уже исправлен для Java 9 и обратно портирован на последние версии JDK 8.

Решение просто обновляет версию JDK latest, если это возможно.

Если нет, удаляется параметр сглаживания или используется SceneAntialiasing.DISABLED.

Смежные вопросы