当我的显示缩放设置为 125%(Windows 10)时,这个简单的 Java swing BoxLayout
UI 显然会导致某些像素不被绘制(导致伪影/垃圾):
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JPanel container = new JPanel();
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int i = 1; i <= 3; i++) panel.add(new JButton("Button " + i));
JFrame frame = new JFrame();
container.add(panel);
frame.add(container);
frame.pack();
frame.setVisible(true);
}
}
结果:
Button 2 和 Button 3 之间有一个像素的间隙。我不太关心间隙本身,但是这个间隙中的像素(在按钮的宽度内)充满了垃圾。在屏幕截图中,这似乎是一个未对齐的按钮部分,但一般来说,只要重新绘制该区域(例如悬停按钮 2 之后),这可能会发生变化,通常来自最近重新绘制的组件(通常在更复杂的应用程序)。据推测,这只是由于显示缩放和特定位置值触发的某种尺寸不匹配而导致的未初始化数据。
最后使用 openjdk-14.0.2 测试。(大概这只能发生在JEP 263在 Java 9 中添加了“HiDPI 图形”支持之后。)
难道我做错了什么?有没有办法避免这个问题或解决它?这是一个问题BoxLayout
还是一个更根本的问题?基本上,发生了什么?