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

时间:2019-01-08 16:39:29

标签: java swing user-interface jframe windows-10

我发现Windows 10和Java有问题。

JFrame frame = new JFrame();
frame.setVisible(true);

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

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

Invisible window border causes an optically space to neighbor elements

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

Expecatation of "snapped" windows and reality

在Windows 7上,它运行完美!

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

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

1 个答案:

答案 0 :(得分: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);
}  

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