我要说的是,如果它只发生在 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 设置上,这显示了以下内容:
边界 = java.awt.Rectangle[x=0,y=0,width=1280,height=1024]
插图 = java.awt.Insets[顶部=0,左侧=0,底部=30,右侧=0]
边界 = java.awt.Rectangle[x=1280,y=0,width=1280,height=1024]
插图 = java.awt.Insets[顶部=0,左侧=0,底部=0,右侧=0]
请注意显示器 1 底部的 30 像素插图。
现在您需要做的就是确定您的应用程序在哪个屏幕上运行。如果您Window.getGraphicsConfiguration()
的应用程序窗口JFrame
是Window
.
我希望这会有所帮助(也许它会帮助那些致力于解决 Substance 错误的人!)