是否存在Java 10 Windows 10隐形框架边框的解决方法?

mst*_*308 5 java user-interface swing jframe windows-10

我发现Windows 10和Java有问题。

JFrame frame = new JFrame();
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

当我创建一个新的JFrame并将其显示在屏幕上时,它通常应具有屏幕坐标x = 0和y = 0。实际上在Windows 10上确实具有这些坐标。

但是,实际上很丑陋的是,Windows 10中的所有窗口似乎在它们周围都有某种“不可见”的边框。因此,在这种情况下,窗口的位置看起来是x = 7且y = 0:

不可见的窗口边框会在视觉上与相邻元素产生空间

这只是一个看起来很丑陋的简单情况。我的软件具有一些逻辑,当您将另一窗口拖动到另一个窗口附近时,该逻辑会将一个窗口“捕捉”到另一个窗口。我想您可以想象,如果两个窗口之间有一个(2 * 7px =)14px的空间,那么应该将它显示为“链接”或“快照”给用户,这看起来是多么丑陋。

演示“捕捉的”窗口和现实

在Windows 7上,它运行完美!

那么有人知道这个问题并且有任何想法,如何解决该问题吗?我想也许可以找出Windows主题的当前名称和操作系统名称。如果它是“ Aero”和“ Windows 10”,则始终只计算-7px的x位置。以某种方式可能吗?还是直接找出不可见区域的宽度是多少?

感谢您对本主题的任何想法。

小智 2

这可以解决您的问题:

public static void setJFrameBounds(JFrame frame, int x, int y, int width, int height) {
    Insets insets = ((Window)frame).getInsets();
    frame.setBounds(x - insets.left, y, width, height);
}  
Run Code Online (Sandbox Code Playgroud)

编辑:调用函数之前 JFrame 必须可见