我有一段代码,直接可运行的
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.*;public class TableExample3// extends AbstractTableModel
{
public static void main(String[] args)
{
      new TableExample3();
    }
    public TableExample3()
    {
        JFrame frame = new JFrame("Table");
TableSort  sorter = new TableSort(new TableModel());
JTable    tableView = new JTable(sorter);
        sorter.addMouseListenerToHeaderInTable(tableView);
        JScrollPane scrollpane = new JScrollPane(tableView);        scrollpane.setPreferredSize(new Dimension(100, 300));
        frame.getContentPane().add(scrollpane);
        frame.pack();
        frame.setVisible(true);
    }
//表格的模型
class TableModel extends AbstractTableModel
{
String[] names = {"First Name"};
        Object[][] data = {{new Integer(3)},{new Integer(1)},{new Integer(5)},{new Integer(7)},{new Integer(6)},{new Integer(9)}
        ,{new Integer(111)},{new Integer(324)},{new Integer(343)},{new Integer(655)},{new Integer(1000)},{new Integer(100)}};
public int getColumnCount()
{
return names.length;
}
public int getRowCount()
{
return data.length;
}
public Object getValueAt(int row, int col)
{
return data[row][col];
}
public String getColumnName(int column)
{
return names[column];
}
public Class getColumnClass(int col)
{
return getValueAt(0,col).getClass();
}
public boolean isCellEditable(int row, int col)
{
return false;
}
public void setValueAt(Object aValue, int row, int column)
{
data[row][column] = aValue;
}
}
}//模式类
import javax.swing.table.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
class TableSort extends AbstractTableModel
{
public TableModel model;
int [] index = null;
int compares = 0;
Vector v = new Vector();
JTable tableView = null;
public TableSort(TableModel model)
{
this.model = model;
int rowMax = model.getRowCount();
index = new int[rowMax];
for(int i = 0;i<rowMax;i++)
{
index[i] = i;
}
}
public Object getValueAt(int row, int column)
{
return model.getValueAt(index[row], column);
}
public void setValueAt(Object value, int row, int column)
{
model.setValueAt(value, index[row], column);
    }
public int getRowCount()
{
return model.getRowCount();
}
public int getColumnCount()
{
return model.getColumnCount();
}
public String getColumnName(int column)
{
return model.getColumnName(column);
}
public Class getColumnClass(int column)
{
return model.getColumnClass(column);
}
public boolean isCellEditable(int row, int column)
{
 return model.isCellEditable(row, column);
    }
    public int bijiao(int row1, int row2, int column)
{
Class type = model.getColumnClass(column);
Object o1 = model.getValueAt(row1, column);
Object o2 = model.getValueAt(row2, column); if (o1 == null && o2 == null) {
return 0;
}
else if (o1 == null) {
return -1;
}
else if (o2 == null) {
return 1;
} if (type == java.lang.Integer.class)
{
Integer n1 = (Integer)model.getValueAt(row1, column);
double d1 = n1.doubleValue();
Integer n2 = (Integer)model.getValueAt(row2, column);
double d2 = n2.doubleValue();
if (d1 < d2)
return -1;
else if (d1 > d2)
return 1;
else
return 0;
}
else
{
Object v1 = model.getValueAt(row1, column);
String s1 = v1.toString();
Object v2 = model.getValueAt(row2, column);
String s2 = v2.toString();
int result = s1.compareTo(s2); if (result < 0)
return -1;
else if (result > 0)
return 1;
else return 0;
}
} public int compare(int row1, int row2)
{
compares++;
for(int level = 0; level < v.size(); level++)
{
Integer column = (Integer)v.elementAt(level);
int result = bijiao(row1, row2, column.intValue());
if (result != 0)
{
return result;
}
}
return 0;
}
public void jiao(int column)
{
v.removeAllElements();
v.addElement(new Integer(column));
n2sort();
}
public void jiao1(int column)
{
v.removeAllElements();
v.addElement(new Integer(column));
nsort();
}
public void n2sort()
{
for(int i = 0; i < getRowCount(); i++)
{
for(int j = i+1; j < getRowCount(); j++)
{
if (compare(index[i],index[j]) == 1)
{
swap(i, j);
}
}
}
}
public void nsort()
{
for(int i = 0; i < getRowCount(); i++)
{
for(int j = i+1; j < getRowCount(); j++)
{
if (compare(index[i],index[j]) == -1)
{
swap(i, j);
}
}
}
}
public void swap(int i, int j)
{
int tmp = index[i];
index[i] = index[j];
index[j] = tmp;
}
public void addMouseListenerToHeaderInTable(JTable table)
{
tableView = table; MouseAdapter listMouseListener = new MouseAdapter()
{
boolean bool = true;
public void mouseClicked(MouseEvent e)
{
TableColumnModel columnModel = tableView.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = tableView.convertColumnIndexToModel(viewColumn);
if(e.getClickCount() == 1 && column != -1)
{
int shi = e.getModifiers(); if(bool)
{
System.out.println("1");
jiao(column);
bool = false;
}
else
{
System.out.println("2");
jiao1(column);
bool = true;
}
}
 }
 };
JTableHeader th = tableView.getTableHeader();
th.addMouseListener(listMouseListener);
    }
}