HiDPI ディスプレイのサポートを利用するために、Swing アプリを Java 11 に移行しています。Windows 10 で、解像度が 3840x2160、スケーリングが 125% の Samsung モニターを使用しています。
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 でも同じ動作が見られます)