У меня проблема с размещением компонентов. Во-первых, я постараюсь дать (возможно, полезной) информации, а затем рассказать о главной проблеме:Локальное размещение компонентов SWING на Java с монитором 4K
Моя система: Windows 8.1 64bit, Java 1.8.0_60 32bit
То, что я пытаюсь сделать, это: После того, как я изучу разрешения экрана всех подключенных экранов, я помещаю некоторые компоненты поворота вокруг экрана. Это означает, что мне нужно знать разрешения экранов.
Я использую несколько мониторов.
- 3840 х 2160 (основной монитор)
- 1920 х 1080 (вторичный)
Я использую:
graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
devices = graphicsEnvironment.getScreenDevices();
И для главного устройства экрана:
devices[i].getDefaultConfiguration().getBounds()
возвращает [0, 0, 2560, 1440]. Вместо правильных значений 3840 x 2160.
Интересная вещь;
devices[i].getDisplayMode().getWidth() and getHeight()
возвращает правильные значения 3840 и 2160.
Примечание: Это различие не происходит ни в одном другом выборе разрешения экрана. Например, если я выбираю 1920 x 1080 для главного экрана, оба метода getDefaultConfiguration() getBounds() и getDisplayMode(). GetWidth() "возвращает правильные значения.
Теперь
Вы можете сказать, что я уже получаю правильные размеры. Итак, в чем дело?
Дело в том, что когда я пытаюсь позиционировать компоненты SWING, они помещаются в неправильные позиции. Например, элемент в [3750, 0, 10, 10] попадает внутрь второго монитора, в то время как он должен был находиться в правом верхнем углу первого экрана.
Другой пример: Как вы знаете, компонент с фиксированным размером будет казаться меньшим в более высоких разрешениях. Поскольку процент пикселя, связанный с экраном, становится меньше, сам компонент также выглядит меньше. Например; Когда я увеличиваю разрешение экрана с 1920x1080 до 2560x1440, мои компоненты становятся меньше. Но, когда я увеличиваю разрешение от 2560x1440 до 3840x2160; они остаются в одном размере.
Надеюсь, я был о проблеме.
Благодаря
Возможно, вам интересно добавить версии OS, JVM ... и т. Д. На ваш вопрос. И [MVCE] (https://stackoverflow.com/help/mcve), чтобы поиграть. –
Oracle не модифицирует Swing для работы на мониторах 4K. Похоже, вам нужно создать внешний вид 4K, дать L & F бесплатно и поддерживать его навсегда. –
@TT. Windows 8.1 64bit, Java 1.8.0_60 32bit. Я не думаю, что MVCE необходим, поскольку даже шаблонный проект с простым jFrame покажет вам проблему, если у вас есть экран 4K. –