Java窗口没有在使用Substance LAF的任务栏上正确最大化

时间:2011-03-16 19:14:06

标签: java swing look-and-feel substance

我刚才注意到,当我在第二个屏幕上最大化一个帧时 - 它没有任务栏 - 然后它会以任务栏所在的大约一个边界结束。

我刚刚注意到这已经切换到Windows 7.以前在Vista中,我有一个实用程序可以在两个屏幕上添加任务栏,所以如果不是这样的话,这可能也是一个问题。我很确定在Linux中我已经尝试了几个窗口管理器这不是问题......

如果我使用默认的LAF运行程序,则会显示正确的行为(使用屏幕的完整水平空间)。我认为StackOverflow并不是提交物质错误报告的最佳位置,但如果有人可以提出补救措施,或者确认它确实是一个错误并帮助确定它发生的情况,那将非常感激。< / p>

编辑:我刚刚挖掘了一下源代码,发现了对issue 213的一些引用;正是我现在遇到的缺陷,据说当时已经确定(早在2007年)并且据报道在XP&amp; Vista具有现代风格(4.1)。我可能会尝试在某个时候调试相关的代码位;看起来相当容易管理。

/滚草

1 个答案:

答案 0 :(得分: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]

请注意监视器1底部的30像素插图。

现在您需要做的就是找出运行应用程序的屏幕。如果您的应用程序窗口是Window.getGraphicsConfiguration()JFrame的任何其他子类,则可以使用Window来获取活动屏幕的图形配置。

我希望这有帮助(也许它会帮助处理Substance bug的人!)