#java #layout #javafx #scenebuilder
#java #макет #javafx #scenebuilder
Вопрос:
Пару раз сталкивался с этой проблемой при создании этого приложения, и теперь она действительно мешает нашей функциональности. Проблема впервые возникла, когда мой другой разработчик (использующий mac) попытался запустить наше приложение, когда я изменил строку кода, влияющую на сцену:
Screen screen = Screen.getPrimary();
Rectangle2D bounds = screen.getVisualBounds();
overallStage.setX(bounds.getMinX());
overallStage.setY(bounds.getMinY());
overallStage.setWidth(bounds.getWidth());
overallStage.setHeight(bounds.getHeight());
Это должно было позволить увеличить экран после входа пользователя в систему. После входа пользователя Mac в систему сцена вместо этого сворачивается в крошечное окно в нижнем левом углу, а затем исчезает. Аналогичная ситуация сейчас происходит с новым дополнением, которое я сделал.
Я сделал это дополнение, чтобы включить боковое меню в приложение. Как вы можете видеть, я поместил всю сцену в панель стека, а затем в панель привязки (см. Иерархия) с внешней панелью привязки для бокового меню. Теперь происходит то же самое, что и при минимизации и исчезновении на двух разных компьютерах Mac, с Windows все в порядке.
Что-то заставляет меня думать, что некоторые макеты и настройки сцены несовместимы с Mac, поскольку это произошло снова только после того, как я обернул основную сцену, кто-нибудь сталкивался с этой проблемой или знает, как ее исправить?
Комментарии:
1. Действительно хороший вопрос!
2. Фактический код макета написан на Java, поэтому он должен выполнять то же самое в любой системе (по крайней мере, если в системах используется одна и та же версия JDK). Очевидно, что
Screen
API (Screen.getPrimary()
иscreen.getVisualBounds()
) должен взаимодействовать с собственной системой и, возможно, выполнять некоторые преобразования координат. Можете ли вы записать, какие значения вы получаете для границ экрана в разных системах? Какая версия JDK работает в каждой системе? В некоторых более ранних версиях JDK на Mac были ошибки, преобразующие собственные координаты экрана в систему координат, используемую JavaFX.
Ответ №1:
При настройке значений stage вы должны:
//Initialize Group root for Main Node
Group root = new Group();
//Initialize Scene on group root with specific sizes
Scene scene = new Scene(root, 450, 250);
//Initialize BorderPane and Bind the layout with the scene size.
BorderPane borderPane = new BorderPane();
borderPane.prefHeightProperty().bind(scene.heightProperty());
borderPane.prefWidthProperty().bind(scene.widthProperty());
//Set the TabPane to be centered
borderPane.setCenter(tabPane);
//Adds Layout to Main Node
root.getChildren().add(borderPane);
Это автоматически изменит размер окна в зависимости от разрешения вашего экрана рядом со всеми вашими элементами управления. Таким образом, вы можете сделать свой JavaFX совместимым со всеми операционными системами.
Удачи. Дайте мне знать, если вам нужна дополнительная помощь. 🙂