Swing/HorizontalAlignmentHeaderRenderer のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
TITLE:JTableHeaderの字揃えを変更
Posted by aterai at 2010-11-29
JTableHeaderの字揃えを変更
JTableHeaderの字揃えを変更します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
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() { 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列目だけ中央揃えにすることが可能だが、初回がWindowsLnFなどのSystemLookAndFeelの場合、LookAndFeelを変更するとNullPointerExceptionが発生する(それ以外の場合でもヘッダのLnFが切り替わらない)。
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() {
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;
}
});