TableRowSorter Nutzung LookAndFeel des TableHeader, aber eigener Comparator

ChantalM

Mitglied
Java SE 6
Die Arrows für ASC/DESC sind über dem Header-Text (ist must have vom Kunden)

Ich nutze
Code:
    	TableRowSorter sorter = new TableRowSorter();
        sorter.setModel(table.getModel());
        table.setRowSorter(sorter);
bzw.
    	table.setAutoCreateRowSorter(true);

Hier werden die Pfeile für die Sortierrichtung genau richtig über den Texten in den TableHeadern angezeigt (must have vom Kunden erfüllt).
Ich will aber einen eigenen Comparator benutzen. Wenn ich das versuche, den MouseListener zu überschreiben, funktioniert das nicht, mein Comparator wird ignoriert:

Code:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Collections;
import java.util.Comparator;
import java.util.Vector;
 
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

import javax.swing.SwingUtilities; 
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class JTableExample extends JFrame {
 
    private JTable table;
 
    private FooTableModel model;
 
    public JTableExample() {
        super("JTableExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
            String plaf = UIManager.getSystemLookAndFeelClassName();
            try {
				UIManager.setLookAndFeel(plaf);
			} 
            catch (ClassNotFoundException e) {} 
			catch (InstantiationException e) {} 
			catch (IllegalAccessException e) {} 
			catch (UnsupportedLookAndFeelException e) {}
            SwingUtilities.updateComponentTreeUI(this);
 
        Object[][] rowData = { { "a", "c" }, { "b", "b" }, { "c", "a" } };
        Object[] columnHeaders = { "Header1", "Header2" };
        model = new FooTableModel(rowData, columnHeaders);
 
        table = new JTable(model);
		table.setAutoCreateRowSorter(true);
 
        table.getTableHeader().addMouseListener(new MouseAdapter() {
        	@Override
            public void mouseClicked(MouseEvent evt) {
               model.sortByColumn(table.columnAtPoint(evt.getPoint()));
            }
        });
 
        Container c = getContentPane();
        c.add(new JScrollPane(table), BorderLayout.CENTER);
 
        pack();
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new JTableExample();
    }
 
    class FooTableModel extends DefaultTableModel {
        public FooTableModel(Object[][] rowData, Object[] headers) {
            super(rowData, headers);
        }
 
        public void sortByColumn(final int clm) {
            Collections.sort(this.dataVector, new Comparator() {
                public int compare(Object o1, Object o2) {
                    Vector v1 = (Vector) o1;
                    Vector v2 = (Vector) o2;
 
 
                    String s1 = (String) v1.get(clm);
                    String s2 = (String) v2.get(clm);
 
                    return s1.compareTo(s2);
                }
            });
        }
    }
}
 

Neue Beiträge

Zurück