java - 125% 显示缩放的 BoxLayout 工件
问题描述
当我的显示缩放设置为 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
还是一个更根本的问题?基本上,发生了什么?
解决方案
推荐阅读
- c++ - 通过引用传递参数时我不明白这个错误
- laravel - 在 Laravel 5.7 中更改验证电子邮件的默认“主题”字段
- php - ClassNotFoundException 试图从全局命名空间加载类“RajaOngkirLib”。您是否忘记了“使用”声明?
- javascript - 在javascript中创建新的数组排序多维数组
- excel - 忽略 Google 表格中索引/排名中的空白
- sql-server - 分析服务将日期转换为日期时间
- groovy - 如何验证 Groovy 文件是否具有正确的语法而不运行它?
- ruby-on-rails - 如何在 Ruby on Rails 中的表之间添加查询
- jmeter - jmeter:需要执行 x 个 http 请求,每个请求有 3 个从 JSON 提取器结果中选取的对象,每 3 个
- react-native - 不变违规:元素类型无效:预期字符串:React-Native