JTable 排序的问题
public class SortTable {
JFrame jf=new JFrame("测试");
Object [][] tableData=
{
{"李清照",99,"女"},
{"苏格拉底",30,"男"},
{"李",35,"男"},
{"李白",40,"按"},
{"那附近那个是",58,"男"}
};
Object [] columnTitle= {"姓名","年龄","性别"};
JTable table=new JTable(tableData,columnTitle);
SortableTableModel sorterModel=new SortableTableModel(table.getModel());
public void init()
{
table.setModel(sorterModel);
table.getTableHeader().addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
if(event.getClickCount()<2)
return;
int tableColumn=table.columnAtPoint(event.getPoint());
int modelColumn=table.convertColumnIndexToModel(tableColumn);
sorterModel.sort(modelColumn);
}
}
);
jf.add(new JScrollPane(table));
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new SortTable().init();
}
}
class SortableTableModel extends AbstractTableModel
{
private TableModel model;
private int sortColumn;
private Row[] rows;
// 将一个已经存在TableModel对象包装成SortableTableModel对象
public SortableTableModel(TableModel m)
{
// 将被封装的TableModel传入
model = m;
rows = new Row[model.getRowCount()];
// 将原TableModel中的每行记录的索引使用Row数组保存起来
for (int i = 0; i < rows.length; i++)
{
rows[i] = new Row(i);
}
}
// 实现根据指定列进行排序
public void sort(int c)
{
sortColumn = c;
java.util.Arrays.sort(rows);
//fireTableDataChanged();
updateUI();
}
private void updateUI() {
// TODO Auto-generated method stub
}
public Object getValueAt(int r, int c)
{
return model.getValueAt(rows[r].index, c);
}
public boolean isCellEditable(int r, int c)
{
return model.isCellEditable(rows[r].index, c);
}
public void setValueAt(Object aValue, int r, int c)
{
model.setValueAt(aValue, rows[r].index, c);
}
// 下面方法的实现把该model的方法委托为原封装的model来实现
public int getRowCount()
{
return model.getRowCount();
}
public int getColumnCount()
{
return model.getColumnCount();
}
public String getColumnName(int c)
{
return model.getColumnName(c);
}
public Class getColumnClass(int c)
{
return model.getColumnClass(c);
}
private class Row implements Comparable<Row>
{
// 该index保存着被封装Model里每行记录的行索引
public int index;
public Row(int index)
{
this.index = index;
}
// 实现两行之间的大小比较
public int compareTo(Row other)
{
Object a = model.getValueAt(index, sortColumn);
Object b = model.getValueAt(other.index, sortColumn);
if (a instanceof Comparable)
{
System.out.println(a);
return ((Comparable)a).compareTo(b);
}
else
{
return a.toString().compareTo(b.toString());
}
}
}
}
当我点击 姓名 排序的时候 不是按照字符串的长度进行排序吗?
为什么 李清照 总是排在第二位呢?