Как заставить JavaFX сказать, нахожусь ли я на экране 4k или 1080p
Я пытаюсь заставить JavaFX определять разрешение экрана, на котором я нахожусь, либо 1080p, либо 4k, чтобы я мог соответственно определить размер/положение моей программы.
Я попробовал Screen.getPrimary().getDpi()
, и он напечатал "96". Используя Toolkit.getDefaultToolkit().getScreenResolution()
, я получил результат "144". Я понятия не имею, какой из них правильный, и есть ли лучший способ сделать это.
Пожалуйста, помогите. Спасибо.
2 ответа:
На самом деле вы хотите знать размер экрана , а не плотность пикселей . DPI - это измерение дляточек на дюйм .
В JavaFX вы достигаете этого с помощью экранного класса. Как пользователь назвал jewelsea указал на визуальные границы возвращают только значения для визуальной области выбранного экрана. Это означает, что вы хотите использовать
screenObject.getVisualBounds()
для этого иscreenObject.getBounds()
для реального экрана размеры.// full bounds Rectangle2D bounds = Screen.getPrimary().getBounds(); bounds.getWidth(); // screens width bounds.getHeight(); // screens height // visual bounds Rectangle2D visualBounds = Screen.getPrimary().getVisualBounds(); visualBounds.getWidth(); // screens usable width (no task bars etc.) visualBounds.getHeight(); // screens usable height
В фрагменте кода используется основной экран. Вы также можете получить другие экраны с помощью
Screen.getScreens()
.
Я только что нашел другой способ найти ширину экрана, используя AWT GraphicsEnvironment. Код следующий:
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode().getWidth()
Этот метод дает мне" истинную " ширину экрана 4k: 3840
Используя следующий метод в Javafx, ширина равна 2560.
Rectangle2D visualBounds = Screen.getPrimary().getVisualBounds();
Мысль может быть полезной информацией для людей, сталкивающихся с подобными проблемами.