8

HiDPI ディスプレイのサポートを利用するために、Swing アプリを Java 11 に移行しています。Windows 10 で、解像度が 3840x2160、スケーリングが 125% の Samsung モニターを使用しています。

Java 9 以降は HiDPI スケーリングを適切に処理すると宣伝されていますが、単純な JTable を表示すると、次のようにグリッド線が異なる太さで表示されます。

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 を設定すると、問題は解消されます。

JTable ニンバス

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 でも同じ動作が見られます)

4

1 に答える 1