Swing/HorizontalAlignmentHeaderRenderer のバックアップの現在との差分(No.4)
TITLE:JTableHeaderの字揃えを変更
Posted by aterai at 2010-11-29
JTableHeaderの字揃えを変更
JTableHeaderの字揃えを変更します。-
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
を使って変更します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spandel
class HorizontalAlignmentHeaderRenderer implements TableCellRenderer{
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
class HorizontalAlignmentHeaderRenderer implements TableCellRenderer {
#spanend
private int horizontalAlignment = SwingConstants.LEFT;
public HorizontalAlignmentHeaderRenderer(int horizontalAlignment) {
this.horizontalAlignment = horizontalAlignment;
}
public Component getTableCellRendererComponent(
#spanadd
#spanend
@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);
JLabel l = (JLabel) r.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
l.setHorizontalAlignment(horizontalAlignment);
return l;
}
}
解説
- Test1:
- JTableHeaderから、DefaultRenderer を取得し、setHorizontalAlignmentメソッドで字揃えを設定
解説
-
Test1
:-
JTableHeader
からDefaultRenderer
を取得してsetHorizontalAlignment
メソッドで字揃えを設定 - すべての列の字揃えが変更される
#spandel ((JLabel)table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER); #spanend #spanadd ((JLabel) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER); #spanend
-
- Test2:
- DefaultTableCellRendererを継承するレンダラーを設定
- LookAndFeelの色などが表示されない?
-
Test2
:-
DefaultTableCellRenderer
を継承するレンダラーを設定 -
LookAndFeel
の色などが表示されない?table.getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer() { public Component getTableCellRendererComponent( @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent( table,value,isSelected,hasFocus,row,column); table, value, isSelected, hasFocus, row, column); setHorizontalAlignment(SwingConstants.CENTER); return this; } } });
-
- Test3:
- TableCellRenderer#getTableCellRendererComponent(...)メソッド内で、デフォルトのヘッダレンダラーを取得し、字揃えを設定
- 上記のHorizontalAlignmentHeaderRendererを全ての列に設定
-
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));
-
以下のようして、先頭列だけ中央揃えにすることも出来ますが、LookAndFeelを変更するとNullPointerExceptionが発生します。
- 以下の方法でも
0
列目だけ中央揃えになるが初回がWindowsLookAndFeel
などのSystemLookAndFeel
の場合、あとでLookAndFeel
を変更するとNullPointerException
が発生する- それ以外の場合でもヘッダの
LookAndFeel
が切り替わらない
- それ以外の場合でもヘッダの
#spandel
final TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer();
#spanend
#spandel
//table.getColumnModel().getColumn(0).setHeaderRenderer(new TableCellRenderer() {
#spanend
#spanadd
try {
#spanend
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
#spanadd
} catch (Exception e) {
#spanend
e.printStackTrace();
#spanadd
}
#spanend
#spanadd
// ...
#spanend
#spanadd
TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer();
#spanend
#spanadd
// table.getColumnModel().getColumn(0).setHeaderRenderer(new TableCellRenderer() {
#spanend
table.getTableHeader().setDefaultRenderer(new TableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value,
@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) {
JLabel l = (JLabel) renderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
if (table.convertColumnIndexToModel(column) == 0) {
l.setHorizontalAlignment(SwingConstants.CENTER);
}else{
} else {
l.setHorizontalAlignment(SwingConstants.LEFT);
}
return l;
}
});