Как заставить JavaFX сказать, нахожусь ли я на экране 4k или 1080p


Я пытаюсь заставить JavaFX определять разрешение экрана, на котором я нахожусь, либо 1080p, либо 4k, чтобы я мог соответственно определить размер/положение моей программы.

Я попробовал Screen.getPrimary().getDpi(), и он напечатал "96". Используя Toolkit.getDefaultToolkit().getScreenResolution(), я получил результат "144". Я понятия не имею, какой из них правильный, и есть ли лучший способ сделать это.

Пожалуйста, помогите. Спасибо.

2 2

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();

Мысль может быть полезной информацией для людей, сталкивающихся с подобными проблемами.