Swing/HorizontalAlignmentHeaderRenderer のバックアップ(No.21)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/HorizontalAlignmentHeaderRenderer へ行く。
- 1 (2010-11-29 (月) 14:41:04)
- 2 (2010-12-07 (火) 11:23:41)
- 3 (2010-12-17 (金) 21:17:41)
- 4 (2011-11-24 (木) 16:45:17)
- 5 (2012-02-17 (金) 20:34:49)
- 6 (2012-06-23 (土) 00:19:26)
- 7 (2012-08-07 (火) 16:11:03)
- 8 (2012-09-04 (火) 22:02:33)
- 9 (2012-12-25 (火) 05:05:54)
- 10 (2013-08-16 (金) 16:30:28)
- 11 (2014-10-13 (月) 10:47:53)
- 12 (2014-12-18 (木) 17:10:13)
- 13 (2014-12-26 (金) 15:46:35)
- 14 (2015-03-12 (木) 15:08:29)
- 15 (2015-03-25 (水) 16:56:43)
- 16 (2016-01-13 (水) 13:34:19)
- 17 (2016-09-28 (水) 18:35:12)
- 18 (2017-03-29 (水) 13:53:50)
- 19 (2018-02-09 (金) 19:17:47)
- 20 (2019-05-22 (水) 19:35:38)
- 21 (2020-02-13 (木) 14:43:31)
- 22 (2021-08-03 (火) 14:55:03)
- category: swing
folder: HorizontalAlignmentHeaderRenderer
title: JTableHeaderの字揃えを変更
tags: [JTable, JTableHeader, LookAndFeel, TableCellRenderer]
author: aterai
pubdate: 2010-11-29T14:41:04+09:00
description: JTableHeaderの字揃えをTableCellRendererを使って変更します。
image:
hreflang:
href: https://java-swing-tips.blogspot.com/2016/09/changing-jtable-header-text-alignment.html lang: en
概要
JTableHeader
の字揃えをTableCellRenderer
を使って変更します。
Screenshot
Advertisement
サンプルコード
class HorizontalAlignmentHeaderRenderer implements TableCellRenderer {
private int horizontalAlignment = SwingConstants.LEFT;
public HorizontalAlignmentHeaderRenderer(int horizontalAlignment) {
this.horizontalAlignment = horizontalAlignment;
}
@Override public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
TableCellRenderer r = table.getTableHeader().getDefaultRenderer();
JLabel l = (JLabel) r.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
l.setHorizontalAlignment(horizontalAlignment);
return l;
}
}
View in GitHub: Java, Kotlin解説
Test1
:JTableHeader
から、DefaultRenderer
を取得し、setHorizontalAlignment
メソッドで字揃えを設定- すべての列の字揃えが変更される
((JLabel) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
Test2
:DefaultTableCellRenderer
を継承するレンダラーを設定LookAndFeel
の色などが表示されない?
table.getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer() {
@Override public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
setHorizontalAlignment(SwingConstants.CENTER);
return this;
}
});
Test3
:TableCellRenderer#getTableCellRendererComponent(...)
メソッド内で、デフォルトのヘッダセルレンダラーを取得し、字揃えを設定- 上記の
HorizontalAlignmentHeaderRenderer
を全ての列に設定
table.getColumnModel().getColumn(0).setHeaderRenderer(
new HorizontalAlignmentHeaderRenderer(SwingConstants.LEFT));
table.getColumnModel().getColumn(1).setHeaderRenderer(
new HorizontalAlignmentHeaderRenderer(SwingConstants.CENTER));
table.getColumnModel().getColumn(2).setHeaderRenderer(
new HorizontalAlignmentHeaderRenderer(SwingConstants.RIGHT));
- 以下の方法でも
0
列目だけ中央揃えになるが、初回がWindowsLookAndFeel
などのSystemLookAndFeel
の場合、あとでLookAndFeel
を変更するとNullPointerException
が発生する- それ以外の場合でもヘッダの
LookAndFeel
が切り替わらない
- それ以外の場合でもヘッダの
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
// ...
final TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer();
//table.getColumnModel().getColumn(0).setHeaderRenderer(new TableCellRenderer() {
table.getTableHeader().setDefaultRenderer(new TableCellRenderer() {
@Override public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel l = (JLabel) renderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
if (table.convertColumnIndexToModel(column) == 0) {
l.setHorizontalAlignment(SwingConstants.CENTER);
} else {
l.setHorizontalAlignment(SwingConstants.LEFT);
}
return l;
}
});