Swing/HorizontalAlignmentHeaderRenderer のバックアップの現在との差分(No.20)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - 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: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTN5ZuPeZI/AAAAAAAAAbg/Fivi4R1rR-Y/s800/HorizontalAlignmentHeaderRenderer.png hreflang: href: https://java-swing-tips.blogspot.com/2016/09/changing-jtable-header-text-alignment.html lang: en --- * 概要 [#summary] `JTableHeader`の字揃えを`TableCellRenderer`を使って変更します。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTN5ZuPeZI/AAAAAAAAAbg/Fivi4R1rR-Y/s800/HorizontalAlignmentHeaderRenderer.png) * サンプルコード [#sourcecode] #code(link){{ 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; } } }} * 解説 [#explanation] - `Test1`: -- `JTableHeader`から、`DefaultRenderer`を取得し、`setHorizontalAlignment`メソッドで字揃えを設定 -- `JTableHeader`から`DefaultRenderer`を取得して`setHorizontalAlignment`メソッドで字揃えを設定 -- すべての列の字揃えが変更される #code{{ ((JLabel) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER); }} - `Test2`: -- `DefaultTableCellRenderer`を継承するレンダラーを設定 -- `LookAndFeel`の色などが表示されない? #code{{ 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(...)`メソッド内で、デフォルトのヘッダセルレンダラーを取得し、字揃えを設定 -- `TableCellRenderer#getTableCellRendererComponent(...)`メソッド内でデフォルトのヘッダセルレンダラーを取得して字揃えを設定 -- 上記の`HorizontalAlignmentHeaderRenderer`を全ての列に設定 #code{{ 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`が発生する - 以下の方法でも`0`列目だけ中央揃えになるが初回が`WindowsLookAndFeel`などの`SystemLookAndFeel`の場合、あとで`LookAndFeel`を変更すると`NullPointerException`が発生する -- それ以外の場合でもヘッダの`LookAndFeel`が切り替わらない #code{{ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } //... final TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer(); //table.getColumnModel().getColumn(0).setHeaderRenderer(new TableCellRenderer() { // ... 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; } }); }} * 参考リンク [#reference] - [[JTableHeaderのフォントを変更>Swing/HeaderFont]] * コメント [#comment] #comment #comment