Swing/TableHeaderRightAlignSortArrow のバックアップ(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TableHeaderRightAlignSortArrow へ行く。
- 1 (2022-08-15 (月) 00:20:23)
- 2 (2022-08-15 (月) 12:21:01)
- 3 (2022-08-16 (火) 11:49:58)
- 4 (2025-01-03 (金) 08:57:02)
- 5 (2025-01-03 (金) 09:01:23)
- 6 (2025-01-03 (金) 09:02:38)
- 7 (2025-01-03 (金) 09:03:21)
- 8 (2025-01-03 (金) 09:04:02)
- 9 (2025-06-19 (木) 12:41:37)
- 10 (2025-06-19 (木) 12:43:47)
- 11 (2025-10-29 (水) 15:25:16)
- category: swing folder: TableHeaderRightAlignSortArrow title: JTableHeaderのソートアイコンをヘッダセル右揃えで表示する tags: [JTableHeader, JTable, UIManager, TableRowSorter] author: aterai pubdate: 2022-08-15T00:19:13+09:00 description: JTableHeaderのソートアイコンの表示位置をタイトル文字列右隣からヘッダセル右揃えに変更します。 image: https://drive.google.com/uc?id=1kIVVpk_5RXF_0L8G6lmCKbcvTm71Pv3Z
Summary
JTableHeaderのソートアイコンの表示位置をタイトル文字列右隣からヘッダセル右揃えに変更します。
Screenshot

Advertisement
Source Code Examples
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
String key = "TableHeader.rightAlignSortArrow";
JCheckBox check = new JCheckBox(key, UIManager.getBoolean(key)) {
@Override public void updateUI() {
super.updateUI();
EventQueue.invokeLater(() -> {
boolean b = UIManager.getLookAndFeelDefaults().getBoolean(key);
setSelected(b);
UIManager.put(key, b);
table.getTableHeader().setCursor(Cursor.getDefaultCursor());
SwingUtilities.updateComponentTreeUI(table);
});
}
};
View in GitHub: Java, KotlinDescription
上記のサンプルではソートアイコンの表示位置をUIManager.put("TableHeader.rightAlignSortArrow", Boolean)でヘッダセルの右揃えで表示するテストを実施しています。
MetalLookAndFeel、MotifLookAndFeel、Windows Classic- デフォルトは
falseでヘッダタイトル文字列の右隣にソートアイコンが表示される UIManager.put("TableHeader.rightAlignSortArrow", Boolean.TRUE)でヘッダセル右揃えのソートアイコンが表示される
- デフォルトは
WindowsLookAndFeel- デフォルトは
falseでヘッダセル上辺中央にソートアイコンが表示される UIManager.put("TableHeader.rightAlignSortArrow", Boolean.TRUE)でヘッダセル上辺中央とヘッダセル右揃えでソートアイコンが重複して表示される
- デフォルトは
GTKLookAndFeel- デフォルトは
falseだがヘッダセル右揃えのソートアイコンが表示される UIManager.put("TableHeader.rightAlignSortArrow", Boolean.TRUE)でソートアイコンが非表示になる
- デフォルトは
NimbusLookAndFeel- デフォルトは
trueでヘッダセル右揃えのソートアイコンが表示される UIManager.put("TableHeader.rightAlignSortArrow", Boolean.FALSE)は無効になったり、ヘッダセルクリックでタイトル文字列の右隣からヘッダセル右揃えにソートアイコンが移動するなど描画が安定しない- ヘッダレンダラーにも以下のように
putClientProperty(...)でTableHeader.rightAlignSortArrowを設定する必要があるJTable#getTableHeader()#putClientProperty(...)などは無効
- デフォルトは
String key = "TableHeader.rightAlignSortArrow";
UIManager.put(key, Boolean.FALSE);
TableCellRenderer renderer = (t, value, isSelected, hasFocus, row, column) -> {
TableCellRenderer r = t.getTableHeader().getDefaultRenderer();
Component c = r.getTableCellRendererComponent(t, value, isSelected, hasFocus, row, column);
if (c instanceof JLabel) {
JLabel l = (JLabel) c;
UIDefaults d2 = new UIDefaults();
d2.put("TableHeader.rightAlignSortArrow", Boolean.FALSE);
l.putClientProperty("Nimbus.Overrides", d2);
l.putClientProperty("Nimbus.Overrides.InheritDefaults", Boolean.TRUE);
}
return c;
};
TableColumnModel cm = table.getColumnModel();
for (int i = 1; i < cm.getColumnCount(); i++) {
cm.getColumn(i).setHeaderRenderer(renderer);
}