TITLE:JTableに行ヘッダを追加

JTableに行ヘッダを追加

編集者:Terai Atsuhiro
作成日:2006-09-04
更新日:2022-09-27 (火) 17:29:54

概要

JTableに行ヘッダを追加を追加します。

#screenshot

サンプルコード

 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;

解説

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

表の余白などに色がついているのは、テストの名残です。特に意味は無いのですが、そのまま残しています。

 rowHeader.setBackground(Color.blue);
 scrollPane.setBackground(Color.red);
 scrollPane.getViewport().setBackground(Color.green);

参考リンク

コメント

  • 不正なセルレンダラーを設定していたので修正しました。 -- terai