Получение разрешения экрана в Java: методы JFrame, Swing
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для определения разрешения экрана в Java обратитесь к классам Toolkit и Dimension:
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
System.out.printf("Разрешение экрана: %dx%d\n", screenSize.width, screenSize.height);
Этот код возвращает значения ширины и высоты экрана в пикселях.
Работа с несколькими мониторами
Если используются множественные мониторы, применяются классы GraphicsEnvironment и GraphicsDevice:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] screens = ge.getScreenDevices();
for (GraphicsDevice screen : screens) {
DisplayMode mode = screen.getDisplayMode();
// Получаем разрешение каждого монитора
System.out.printf("Разрешение монитора %s: %dx%d\n", screen.getIDstring(), mode.getWidth(), mode.getHeight());
}
Данный код предоставит информацию о разрешении каждого подключенного монитора.
Определение DPI экрана
Для установления плотности пикселей на дюйм (DPI) экрана, эффективной для корректной настройки размеров элементов интерфейса, используйте метод Toolkit.getScreenResolution()
:
int screenDPI = Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println("DPI экрана: " + screenDPI);
Это значение влияет на корректность отображения элементов ваших приложений.
Визуализация
Представим, что у нас есть мерная лента, способная мгновенно сообщать точные габариты одежды. Теперь применим эту идею для измерения размеров экрана:
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
А что касается размеров экрана:
Экран (🖥️): [Ширина ↔️, Высота ↕️]
Мерная лента (📏): ↔️ 1920 пикс., ↕️ 1080 пикс.
Решение потенциальных проблем
Использование класса GraphicsConfiguration
При помощи класса GraphicsConfiguration можно получить сведения о габаритах экрана:
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
GraphicsConfiguration config = gd.getDefaultConfiguration();
Rectangle bounds = config.getBounds();
System.out.println("Габариты экрана: " + bounds);
Этот метод помогает установить не только разрешение, но и положение экрана относительно виртуального рабочего стола.
Учёт масштабирования шрифтов в Windows
Настройка масштабирования шрифтов в операционной системе Windows может приводить к искажению размеров экрана. При этом рекомендуется использовать getBounds()
и getDisplayMode()
для корректного определения разрешения:
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] devices = env.getScreenDevices();
for (GraphicsDevice device : devices) {
GraphicsConfiguration[] configurations = device.getConfigurations();
for (GraphicsConfiguration config : configurations) {
Rectangle gcBounds = config.getBounds();
System.out.printf("Реальное разрешение: %dx%d\n", gcBounds.width, gcBounds.height);
}
}
Расчёт общего пространства на мониторах
Если необходимо получить общую картину доступного пространства на всех мониторах, следует использовать следующий код:
int totalWidth = Stream.of(devices)
.mapToInt(device -> device.getDefaultConfiguration().getBounds().width)
.sum();
int totalHeight = Stream.of(devices)
.mapToInt(device -> device.getDefaultConfiguration().getBounds().height)
.max()
.orElseThrow(() -> new RuntimeException("Не найдено ни одного подключенного монитора!"));
System.out.printf("Общая доступная площадь: %dx%d\n", totalWidth, totalHeight);
Таким образом, мы получаем общую ширину и максимальную высоту экранов, что будет полезно для приложений, работающих с несколькими мониторами.
Полезные материалы
- Toolkit.getScreenSize() JavaDoc — Официальная документация по методу Toolkit.getScreenSize() в Java.
- GraphicsDevice GraphicsConfiguration JavaDoc — Подробная информация о классе GraphicsDevice в Java и его методах.
- Как определить разрешение экрана в Java? на Stack Overflow — Полезное обсуждение вариантов определения разрешения экрана в Java.
- Изучение графических возможностей Java в JDK 21 — Глубокое погружение в графические возможности JDK 21 от Oracle.