左右默认有数字,按照从小到大的顺序往下排。
JavaSwingjtable行业数据

解决方案 »

  1.   

    一个简单的静态代理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);
      

  2.   


    可以,但是那个不能简单的hack,因为复选框有逻辑意义,需要你自己的 model 本身支持,也就是说你每一行背后的数据模型本身支持一种 “是否选中” 的状态