Swing/HorizontalAlignmentHeaderRenderer のバックアップ差分(No.9)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - 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の字揃えを変更 #navi(../) #tags() RIGHT:Posted by &author(aterai); at 2010-11-29 *JTableHeaderの字揃えを変更 [#kd2e1845] JTableHeaderの字揃えを変更します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh5.ggpht.com/_9Z4BYR88imo/TQTN5ZuPeZI/AAAAAAAAAbg/Fivi4R1rR-Y/s800/HorizontalAlignmentHeaderRenderer.png) **サンプルコード [#od4f9b74] #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; } } }} **解説 [#y547a05a] - Test1: -- JTableHeaderから、DefaultRenderer を取得し、setHorizontalAlignmentメソッドで字揃えを設定 -- すべての列の字揃えが変更される #code{{ ((JLabel)table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER); }} - Test2: -- DefaultTableCellRendererを継承するレンダラーを設定 -- LookAndFeelの色などが表示されない? #code{{ 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); setHorizontalAlignment(SwingConstants.CENTER); return this; } }); }} - Test3: -- 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列目だけ中央揃えにすることが可能だが、初回がWindowsLnFなどのSystemLookAndFeelの場合、LookAndFeelを変更するとNullPointerExceptionが発生する(それ以外の場合でもヘッダのLnFが切り替わらない)。 #code{{ 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, @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; } }); }} **参考リンク [#s123999d] -[[JTableHeaderのフォントを変更>Swing/HeaderFont]] **コメント [#f205a091] #comment