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);
}
}
}