JTableの表示倍率を変更する
Total: 1667, Today: 3, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JTableのフォントサイズ、行高、セルエディタのチェックアイコンなどを拡大縮小して表示倍率を変更します。
Screenshot

Advertisement
Source Code Examples
table.removeEditor();
Font f = font.deriveFont(fontSize * x);
table.setFont(f);
table.getTableHeader().setFont(f);
table.setRowHeight((int) (.5f + rowHeight * x));
// // IntercellSpacing
// Dimension d = new Dimension(1, 1);
// d.width = (int) (.5f + d.width * x);
// d.height = (int) (.5f + d.height * x);
// table.setIntercellSpacing(d);
// // SortIcon:
// UIDefaults def = UIManager.getLookAndFeelDefaults();
// Icon ascending = def.getIcon("Table.ascendingSortIcon");
// Icon descending = def.getIcon("Table.descendingSortIcon");
// int w = (int) (.5f + ascending.getIconWidth() * x);
// int h = (int) (.5f + ascending.getIconHeight() * x);
// UIManager.put("Table.ascendingSortIcon", new ScaledIcon(ascending, w, h));
// UIManager.put("Table.descendingSortIcon", new ScaledIcon(descending, w, h));
View in GitHub: Java, KotlinDescription
JTableJTable#setFont(...)で倍率を変更したFontを設定するとセルレンダラーのFontも連動して変更される- デフォルトセルレンダラーとは異なりデフォルトセルエディタの
Fontは自動的には更新されないため、このサンプルではJTable#prepareEditor(...)をオーバーライドしてJTableのFontをセルエディタに適用しているJTable#prepareEditor(...)は編集開始前に実行されるのでこのサンプルでは倍率変更の前にJTable#removeEditor()で編集をキャンセルしている
JTableの各行の高さはJTableのFontサイズとは無関係のため、別途JTable#setRowHeight(...)で倍率に応じた高さに変更する必要がある- デフォルトの
BooleanCellRendererやBooleanCellEditorで使用されるJCheckBoxはFontサイズを変更してもチェックアイコンは不変のため、このサンプルではJCheckBoxのチェックアイコンを拡大縮小するのサイズ可変アイコンを使用するよう修正している - 罫線の太さやセル内余白(
JTable#getIntercellSpacing())はJTableのFontサイズを変更しても一定
JTableHeaderJTableに適用したFontはJTableHeaderには自動的に設定されないため、JTable#getTableHeader()#setFont(font)を別途実行する必要があるJTableHeaderの高さはJTableHeaderのFontサイズに自動的に連動して更新されるJTableHeaderに表示されるソートアイコンはJTableHeaderのFontサイズを変更しても一定
Reference
- JCheckBoxのチェックアイコンを拡大縮小する
- Designing tables. A comprehensive visual guide to… | by Andrew Coyle | Nov, 2023 | Medium