我正在将我的Swing应用迁移到Java 11,以利用HiDPI显示支持。我正在使用分辨率设置为3840x2160,缩放比例为125%,Windows 10的三星监视器。
尽管java 9及以上版本被宣传为正确处理HiDPI缩放,但在显示简单的JTable时,网格线的粗细不同,如下所示:
这是此问题的代码:
import javax.swing.*;
public class TestTable {
public static void main(String[] args) {
new TestTable();
}
public TestTable() {
JTable table = new JTable(12,6);
JDialog dialog = new JDialog();
JScrollPane sp = new JScrollPane(table);
table.setShowGrid(true);
table.setRowHeight(25);
dialog.setContentPane(sp);
dialog.setSize(300,300);
dialog.setVisible(true);
dialog.setLocationRelativeTo(null);
}
}
然而,当使用Nimbus L&F主题时,问题就消失了:
import javax.swing.*;
public class TestTable {
public static void main(String[] args) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) { }
new TestTable();
}
public TestTable() {
JTable table = new JTable(12,6);
JDialog dialog = new JDialog();
JScrollPane sp = new JScrollPane(table);
table.setShowGrid(true);
table.setRowHeight(25);
dialog.setContentPane(sp);
dialog.setSize(300,300);
dialog.setVisible(true);
dialog.setLocationRelativeTo(null);
}
}
我该如何使用默认的Windows L&F实现相同的效果?(在Java 9和10中观察到相同的行为)