首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java swing JTable 怎么在行数据前面增加数字,如下图

2013-09-05 
java swing JTable 如何在行数据前面增加数字,如下图左右默认有数字,按照从小到大的顺序往下排。JavaSwingj

java swing JTable 如何在行数据前面增加数字,如下图
左右默认有数字,按照从小到大的顺序往下排。
Java Swing jtable 行业数据
[解决办法]
一个简单的静态代理hack:



import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;



public class LineNumber {
  
  public static void decorate(JTable table) {
    
    if( table == null )
      throw new NullPointerException("table is null.");
    
    TableModel model = table.getModel();
    if( !(model instanceof LineNumberTableModel) )
      table.setModel(new LineNumberTableModel(model));
  }
  
  private static class LineNumberTableModel implements TableModel {
    
    private final TableModel model;
    private LineNumberTableModel(TableModel model) {
      
      this.model = model;
    }
    
    @Override
    public int getRowCount() {
      
      return model.getRowCount();
    }

    @Override
    public int getColumnCount() {
      
      return 1 + model.getColumnCount();
    }

    @Override
    public String getColumnName(int columnIndex) {
      
      return columnIndex == 0 ? "Row" : model.getColumnName(columnIndex - 1);
    }


    @Override
    public Class<?> getColumnClass(int columnIndex) {
      
      return columnIndex == 0 ? Integer.class : model.getColumnClass(columnIndex - 1);
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
      
      return columnIndex == 0 ? false : model.isCellEditable(rowIndex, columnIndex - 1);
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
      
      return columnIndex == 0 ? rowIndex + 1 : model.getValueAt(rowIndex, columnIndex - 1);
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
      
      if( rowIndex == 0 )
        throw new UnsupportedOperationException("Cannot modify line number.");
      else
        model.setValueAt(aValue, rowIndex, columnIndex - 1);
    }

    @Override
    public void addTableModelListener(TableModelListener l) {
      
      model.addTableModelListener(l);
    }

    @Override
    public void removeTableModelListener(TableModelListener l) {
      
      model.removeTableModelListener(l);
    }
  }
}



你要加行号的 JTable 传进去调用就行了:  

LineNumber.decorate(table);
[解决办法]
设置的时候,在第1行增加1个列。再设置序号。把表头置为空。

热点排行