فکر کنم منظورتون همون Listview باشه.
کد زیر یک کلاس که می تونید به جای jtable ازش استفاده کنی
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class JListView extends JTable{
private static class SortTableModel extends AbstractTableModel{
private TableModel tableModel;
private int sortCulomn;
private boolean normalSort;
private Row[] tableRows;
private class Row implements Comparable{
public int index;
public int compareTo(Object o) {
Row second=(Row) o;
Object a=tableModel.getValueAt(index, sortCulomn);
Object b=tableModel.getValueAt(second.index, sortCulomn);
if(a instanceof Comparable){
if(a instanceof String){
String strA=((String) a).toLowerCase();
String strB=((String) b).toLowerCase();
if(normalSort)
return strA.compareTo(strB);
else
return strA.compareTo(strB)*(-1);
}
else{
if(normalSort)
return ((Comparable) a).compareTo(b);
else
return ((Comparable) a).compareTo(b)*(-1);
}
}
else
return index-second.index;
}
}
public SortTableModel(TableModel model){
tableModel=model;
tableRows=new Row[tableModel.getRowCount()];
for (int i = 0; i < tableRows.length; i++) {
tableRows[i] = new Row();
tableRows[i].index=i;
}
sortCulomn=-1;
normalSort=true;
}
private void sort(int culomn){
if(sortCulomn==culomn){
normalSort=!normalSort;
}
else{
sortCulomn=culomn;
normalSort=true;
}
Arrays.sort(tableRows);
fireTableDataChanged();
}
public int getRowCount() {
return tableModel.getRowCount();
}
public int getColumnCount() {
return tableModel.getColumnCount();
}
public Object getValueAt(int rowIndex, int columnIndex) {
return tableModel.getValueAt(tableRows[rowIndex].index, columnIndex);
}
@Override
public void setValueAt(Object value,int rowIndex, int columnIndex) {
tableModel.setValueAt(value, tableRows[rowIndex].index, columnIndex);
}
@Override
public String getColumnName(int columnIndex) {
return tableModel.getColumnName(columnIndex);
}
public void MouseAction(final JTable listView){
listView.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int selectedColumn=listView.columnAtPoint(e.getPoint() );
int modelColumn = listView.convertColumnIndexToModel(selectedColumn) ;
sort(modelColumn);
}
});
}
}
private SortTableModel model;
public JListView(Object[][] data,String[] columns) {
super();
model=new SortTableModel(new DefaultTableModel(data, columns));
this.setModel(model);
model.MouseAction(this);
}
}