我发现Windows 10和Java有问题。
JFrame frame = new JFrame();
frame.setVisible(true);
当我创建一个新的JFrame并将其显示在屏幕上时,它通常应具有屏幕坐标x = 0和y = 0。实际上在Windows 10上确实具有这些坐标。
但是,实际上很丑陋的是,Windows 10中的所有窗口似乎在它们周围都有某种“不可见”的边框。因此,在这种情况下,窗口的位置看起来是x = 7且y = 0:
这只是一个简单的情况,看起来非常丑陋。我的软件具有一些逻辑,当您将另一窗口拖动到另一个窗口附近时,该逻辑会将一个窗口“捕捉”到另一个窗口。我想您可以想象,如果两个窗口之间有一个(2 * 7px =)14px的空间,看起来应该是多么丑陋,但对于用户来说应该显示为“链接”或“捕捉”在一起。
在Windows 7上,它运行完美!
那么有人知道这个问题并且有任何想法,如何解决该问题吗?我想也许可以找出Windows主题的当前名称和操作系统名称。如果它是“ Aero”和“ Windows 10”,则始终只计算-7px的x位置。以某种方式可能吗?还是直接找出不可见区域的宽度是什么?
感谢您对此主题的任何想法。
答案 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必须可见