TITLE:JTableに行ヘッダを追加
#navi(../)
*JTableに行ヘッダを追加 [#le4e858f]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2006-09-04~
更新日:&lastmod;

#contents

**概要 [#q03f1f85]
JTableに行ヘッダを追加を追加します。

#screenshot

**サンプルコード [#kfa64240]
 class RowHeaderList extends JList {
   private final JTable table;
   private final ListSelectionModel tableSelection;
   private final ListSelectionModel rListSelection;
   public RowHeaderList(ListModel model, JTable table) {
     super(model);
     this.table = table;
     setFixedCellHeight(table.getRowHeight());
     setCellRenderer(new RowHeaderRenderer(table.getTableHeader()));
     RollOverListener rol = new RollOverListener();
     addMouseListener(rol);
     addMouseMotionListener(rol);
     tableSelection = table.getSelectionModel();
     rListSelection = getSelectionModel();
   }
   class RowHeaderRenderer extends JLabel implements ListCellRenderer {
     private final JTableHeader header;
     public RowHeaderRenderer(JTableHeader header) {
       this.header = header;
       this.setOpaque(true);
       //this.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
       this.setBorder(BorderFactory.createMatteBorder(0,0,1,2,Color.gray));
       this.setHorizontalAlignment(CENTER);
       this.setForeground(header.getForeground());
       this.setBackground(header.getBackground());
       this.setFont(header.getFont());
     }
     public Component getListCellRendererComponent(JList list, Object value,
                int index, boolean isSelected, boolean cellHasFocus) {
       if(index==pressedRowIndex) {
         setBackground(Color.gray);
       }else if(index==rollOverRowIndex) {
         setBackground(Color.white);
       }else if(isSelected) {
         setBackground(Color.gray.brighter());
       }else{
         setForeground(header.getForeground());
         setBackground(header.getBackground());
       }
       setText((value==null)?"":value.toString());
       return this;
     }
   }
 }

-&jnlp;
-&jar;
-&zip;

**解説 [#z757f120]
上記のサンプルでは、JListで作成した行ヘッダをJScrollPaneにsetRowHeaderViewメソッドで追加しています。

表の余白などに色がついているのは、テストの名残です。特に意味は無いのですが、そのまま残しています。
 rowHeader.setBackground(Color.blue);
 scrollPane.setBackground(Color.red);
 scrollPane.getViewport().setBackground(Color.green);

**参考リンク [#a86f5ca5]
-[[JTable Examples>http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples1.html]]
-[[Java Technology Forums - excel styled table?>http://forum.java.sun.com/thread.jspa?threadID=571508]]
-[[JListのセルをカーソル移動でロールオーバー>Swing/RollOverListener]]

**コメント [#t32c2230]
- 不正なセルレンダラーを設定していたので修正しました。 -- [[terai]] &new{2006-11-16 (木) 20:22:33};

#comment