Я собирался сказать, что если это происходит только с 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
.
Я надеюсь, что это поможет (и, возможно, это поможет людям, работающим над ошибкой Вещества!)