Окно Java не максимизируется должным образом на экране без панели задач с использованием Substance LAF - PullRequest
1 голос
/ 16 марта 2011

Я только что заметил, что, когда я максимизирую кадр на моем втором экране - у которого нет панели задач - тогда это заканчивается примерно теми границами, которые можно ожидать, если бы панель задач была там.

Я только что заметил это, переключившись на Windows 7. Раньше в Vista у меня была утилита для добавления панели задач на оба экрана, так что это могло бы быть проблемой и там, если бы это было не так. Я почти уверен, что это не проблема в Linux с парой оконных менеджеров, которые я попробовал ...

Если я запускаю свою программу с LAF по умолчанию, то демонстрируется правильное поведение (с использованием всего горизонтального пространства экрана). Я полагаю, что StackOverflow на самом деле не лучшее место для отправки отчета об ошибке Вещества, но если кто-то может предложить исправление или подтвердить, что это действительно ошибка и помочь определить обстоятельства, при которых это происходит, это было бы очень полезно. 1005 *

edit: Я только немного покопался в исходном коде и нашел несколько ссылок на issue 213 ; именно тот дефект, который я сейчас испытываю, который якобы был исправлен в то время (еще в 2007 году) и сообщалось, что он корректно работает в XP и Vista с современной сборкой (4.1). Я мог бы попытаться отладить соответствующие биты кода в какой-то момент; выглядит довольно управляемо.

/ перекати

1 Ответ

1 голос
/ 17 марта 2011

Я собирался сказать, что если это происходит только с Substance LaF, то это определенно похоже на ошибку, о которой вы должны сообщить ... но я только что видел ваши изменения перед публикацией Удачи, убедив их исправить это через 4 года!

Между тем, единственный реальный обходной путь, который вы можете попробовать, - это получить вставки текущего дисплея и установить размер таким образом. Вот некоторый код, который определяет разрешение, границы и сколько свободного места доступно на каждом из ваших мониторов:

 public static void main(String... args) throws Exception {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gds = ge.getScreenDevices();
        for (GraphicsDevice gd : gds) {
            GraphicsConfiguration gc = gd.getDefaultConfiguration();
            System.out.println("Bounds = " + gc.getBounds());
            System.out.println("Insets = " + Toolkit.getDefaultToolkit().getScreenInsets(gc));
        }
    }

На двухэкранной установке Windows, как у меня, это показывает следующее:

Bounds = java.awt.Rectangle[x=0,y=0,width=1280,height=1024] 
Insets = java.awt.Insets[top=0,left=0,bottom=30,right=0] 
Bounds = java.awt.Rectangle[x=1280,y=0,width=1280,height=1024] 
Insets = java.awt.Insets[top=0,left=0,bottom=0,right=0]

Обратите внимание на 30-пиксельные вставки в нижней части монитора 1.

Теперь все, что вам нужно сделать, это определить, на каком экране работает ваше приложение. Вы можете использовать Window.getGraphicsConfiguration(), чтобы получить графическую конфигурацию для активного экрана, если окно вашего приложения представляет собой JFrame или любой другой подкласс Window.

Я надеюсь, что это поможет (и, возможно, это поможет людям, работающим над ошибкой Вещества!)

...