1

我刚刚注意到,当我在没有任务栏的第二个屏幕上最大化一个框架时,如果任务栏在那里,它最终会达到人们所期望的范围。

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

如果我使用默认 LAF 运行我的程序,则会显示正确的行为(使用屏幕的整个水平空间)。我想 StackOverflow 并不是提交 Substance 错误报告的最佳地点,但如果有人可以提出补救建议,或确认它确实是一个错误并帮助确定它发生的情况,将不胜感激。

编辑:我刚刚研究了一下源代码,发现了一些对问题 213的引用;正是我现在遇到的缺陷,据说当时已修复(早在 2007 年),并且据报道在现代版本(4.1)中可以在 XP 和 Vista 中正常工作。我可能会尝试在某个时候调试相关的代码;看起来相当易于管理。

/风滚草

4

1 回答 1

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 设置上,这显示了以下内容:

边界 = 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()的应用程序窗口JFrameWindow.

我希望这会有所帮助(也许它会帮助那些致力于解决 Substance 错误的人!)

于 2011-03-17T14:57:45.757 回答