# JTable (DefaultTableModel) nach Spalte sortieren-TableSorter



## Louis2 (7. Jul 2005)

Hallo,

ich habe eine JTable und benutze ein DefaultTableModel. Nun möchte ich es schaffe, dass ich Spalten sortieren kann (und zwar sollten dann alle Zeilen sortiert werden).
Es gibt schon viele Threads dazu, auch die FAQ habe ich mir durchgelesen, aber ich finde den Quellcode sehr kompliziert.
Habe in einem Thread ein Link gefunden und habe mir die Dateien TableSorter.java und TableSorterDemo.java runtergeladen. 

Die arbeiten mit einem AbstractTableModel.
In TableSorterDemo.java heißt es, dass nur 3 Zeilen geändert werden müssen und zwar:

```
TableSorter sorter = new TableSorter(new MyTableModel()); //ADDED THIS
//JTable table = new JTable(new MyTableModel());         //OLD
JTable table = new JTable(sorter);             //NEW
sorter.setTableHeader(table.getTableHeader()); //ADDED THIS
```

Ich habe es bei mir versucht und so den Code eingefügt:

```
final DefaultTableModel model = new DefaultTableModel (title,0); 
TableSorter sorter = new TableSorter(model); //ADDED THIS
//JTable table = new JTable(new MyTableModel());         //OLD
JTable table = new JTable(sorter);             //NEW
sorter.setTableHeader(table.getTableHeader()); //ADDED THIS
```

reicht es? 
Klappt aber nicht und zwar kommen 2 Meldungen:

```
C:\Dokumente und Einstellungen\Lempert\Desktop\EmailClient\src\emailclient\TableSorter.java:63: duplicate class: TableSorter
public class TableSorter extends AbstractTableModel {
```

und

```
C:\Dokumente und Einstellungen\Lempert\Desktop\EmailClient\src\emailclient\EmailClient.java:89: cannot access emailclient.TableSorter 
bad class file: C:\Dokumente und Einstellungen\Lempert\Desktop\EmailClient\src\emailclient\TableSorter.java
file does not contain class emailclient.TableSorter
Please remove or make sure it appears in the correct subdirectory of the classpath.
        TableSorter sorter = new TableSorter(model); //ADDED THIS
```

Wieso bad file? TableSorter gibt es unter dem link ;-)

Danke für die Hilfe...


----------



## Louis2 (7. Jul 2005)

Hat keiner eine Idee wie ich das "sortieren" leicht implementieren könnte?

```
public EmailClient() 
    {
        super("Java mailing");
        
        Container contentPane = this.getContentPane();
        contentPane.setLayout(new BorderLayout());
        
        JPanel button = new JPanel();
        button.setLayout(new FlowLayout(FlowLayout.LEFT));
        button.add(sendButton);
        button.add(valueLabel);
        button.add(value);
        button.add(combo);
        contentPane.add(button);
        sendButton.setEnabled(false);
        value.setEditable(false);
        sendButton.addActionListener(this);
                                
        //Database connection
        try 
        { 
            Class.forName("oracle.jdbc.driver.OracleDriver"); 
            //DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
            String url = "jdbc:oracle:thin:@"+main.DBServer+":1521:"+main.DBName; 
            connection = DriverManager.getConnection(url, main.DBUser, main.DBPassword);
        }
        catch(ClassNotFoundException e1) 
        { 
            e1.printStackTrace(); 
        } 
        catch(Exception e2) 
        {       
            e2.printStackTrace(); 
        }
        
        //JTable column names
        String[] title = new String[]
        { 
            "CustomerNo", "Firmenname", "E-Mail", "AuftragsNr.", "Komm.Nr.", "Gedruckt am", "Umsatzwert", "WE", "Zustand" 
        }; 
        final DefaultTableModel model = new DefaultTableModel (title,0); 
        table = new JTable(model)
        {
           public boolean isCellEditable(int rowIndex, int vColIndex) 
           {
               return false;
           }
        };
        getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH);
                
        TableColumnModel columnModel = table.getColumnModel(); 
        columnModel.getColumn(0).setPreferredWidth(90); 
        columnModel.getColumn(1).setPreferredWidth(100); 
        columnModel.getColumn(2).setPreferredWidth(50); 
        columnModel.getColumn(3).setPreferredWidth(80); 
        columnModel.getColumn(4).setPreferredWidth(70); 
        columnModel.getColumn(5).setPreferredWidth(85); 
        columnModel.getColumn(6).setPreferredWidth(80); 
        columnModel.getColumn(7).setPreferredWidth(40); 
        columnModel.getColumn(8).setPreferredWidth(70); 
                
        table.getTableHeader().setReorderingAllowed(false);
        table.setColumnSelectionAllowed(true);
        table.setRowSelectionAllowed(false);
        
        String comboinhalt[] = 
        {
            "Wählen Sie bitte eine Tabelle", "Kundenaufträge"
        };
```


----------



## Louis2 (8. Jul 2005)

Hat sich erledigt (TableSorter zuerst compilieren und...)

```
final DefaultTableModel model = new DefaultTableModel (title,0); 
TableSorter sorter = new TableSorter(model); 
table = new JTable(sorter);
sorter.setTableHeader(table.getTableHeader());
```


----------

