Окно Java не максимизируется должным образом на экране без панели задач с использованием Substance LAF

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

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

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

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

/ перекати-поле


person PeterT    schedule 16.03.2011    source источник


Ответы (1)


Я собирался сказать, что если это происходит только с 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() this, чтобы получить конфигурацию графики для активного экрана, если окно вашего приложения является JFrame или любым другим подклассом Window.

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

person BoffinBrain    schedule 17.03.2011
comment
Большое спасибо за ответ (я смирился с перспективой получить 2 значка перекати-поля за 2 вопроса подряд... чувство одиночества!). Я не знал, как правильно запрашивать вставки. Как оказалось, у меня есть похожий код для создания окна в полноэкранном режиме, и я обнаружил, что, хотя границы устанавливаются в соответствии с размером всего экрана, я получаю ту же основную проблему. В любом случае, мне нужно идти сейчас, но ваш ответ определенно полезен. К сожалению, Substance сейчас не поддерживается, так как парень в основном работает на Android. - person PeterT; 17.03.2011
comment
Кстати, я бы проголосовал за вас (не принял, так как на самом деле это не ответ, и похоже, что мне придется засучить рукава и изменить вещество, чтобы исправить это) ... но я уже отменил голосование и теперь система не позволит мне восстановить голосование, если вы не отредактируете свой ответ. - person PeterT; 24.03.2011
comment
Хорошо, я сделал для вас редактирование без изменений. Кстати, я считаю, что это лучший ответ, который вы получите от кого-то, кто не имеет контроля над проектом Substance. Извините, это был не тот ответ, на который вы надеялись. ;) - person BoffinBrain; 24.03.2011
comment
ну, изучив исходный текст, стало ясно, что ошибка уже была исправлена ​​в какой-то момент (ошибка 213 была исправлена, но я предполагаю, что в какой-то момент произошел регресс). Как я уже упоминал в комментарии выше, я уже выясняю, на каком экране я нахожусь, и явно устанавливаю границы размера полного экрана, когда я перехожу в полноэкранный режим... это не работает при использовании Вещество, хотя почему-то. - person PeterT; 24.03.2011
comment
О... Вы имеете в виду, что значения Insets, которые вы получаете, неверны, когда LaF активен, или что размер окна не установлен должным образом? - person BoffinBrain; 24.03.2011
comment
Размер окна не устанавливается должным образом. - person PeterT; 24.03.2011
comment
увы, эта ошибка (или отсутствие функции) указана на сайте оракула по состоянию на 2011 год, но до сих пор присутствует в любой реализации lookAndFeel - ИЛИ в неукрашенных окнах: | - person peterk; 26.06.2012