读书人

java swing JTable 怎么在行数据前面增

发布时间: 2013-09-05 16:02:07 作者: rapoo

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个列。再设置序号。把表头置为空。

读书人网 >J2SE开发

热点推荐