JTable sortieren

Hallo,

ich benutzte eclipse, dort wie erwähnt diese Methode nicht akzeptiert. Ich habe im Programme Ordner unter Java die jdk1.6.0_23 liegen. Kann ich sehen worauf eclipse zurückgreift?

Habe das jetzt aber anders gelöst. Nur klappt bei mir der Sortier Algorithmus nicht.

this.list ist meine ArrayList, zwei Dimensional. Darin Enthalten sind Strings und Int, leider weiß ich nicht wie ich diesen Code anpassen kann. Geht das auch einfacher? :D
Java:
    public void sortByColumn(final int clm) {
        Collections.sort(this.list, new Comparator() {
            public int compare(Object o1, Object o2) {
                Vector v1 = (Vector) o1;
                Vector v2 = (Vector) o2;

                int size1 = v1.size();
                if (clm >= size1)
                    throw new IllegalArgumentException("max column idx: "+ size1);

                Comparable c1 = (Comparable) v1.get(clm);
                Comparable c2 = (Comparable) v2.get(clm);

                int cmp = c1.compareTo(c2);

                if (sortColumnDesc[clm]) {
                    cmp *= -1;
                }

                return cmp;
            }
        });
        this.sortColumnDesc[clm] ^= true;
    }

Kann mir jemand dazu helfen? Das klappt nicht.
 
mit Comparator ginge es so:

Code:
Object[][] data = {{"ggggg",1},{"aaaaa",3},{"bbbbb",2}};
Object[] column = {"A","B"};
JTable tab = new JTable(data,column);
TableRowSorter sorter = new TableRowSorter(tab.getModel());
tab.setRowSorter(sorter);
sorter.setComparator(0, new MyStringComparator());
sorter.setComparator(1, new MyIntegerComparator());
//...

   class MyStringComparator implements Comparator<String> {
        public int compare(String o1, String o2) {
            return (o1.compareTo(o2));
        }
   }

   class MyIntegerComparator implements Comparator<Integer> {
        public int compare(Integer o1, Integer o2) {
            return o1.compareTo(o2);
        }
   }
}
 
Danke, das funktioniert.

Eine kleine Frage noch, ich habe einen TabeleCellRenderer der mir Pfeile für die Sortierungsrichtung setzt, wie kann ich schauen in welche Richtung zur Zeit sortiert wird?

sorter.getComparator?
 
Es ist ein wenig komplizierter :)

Code:
sorter.addRowSorterListener(new RowSorterListener(){
    public void sorterChanged(RowSorterEvent e) {
        RowSorter tSorter = (RowSorter)e.getSource();
        List<? extends RowSorter.SortKey> sortKeys = tSorter.getSortKeys();
        String sortOrder = sortKeys.get(0).getSortOrder().toString();
       // die aktuelle Sortierrichtung
    }
});
... aber es ist nicht die ganz korrekte, hundertprozentige Lösung.
 
Hallo,

irgendwie verstehe ich das nicht ganz. Meine TableCellRenderer sieht so aus.

Java:
        table.getTableHeader().setDefaultRenderer(
                new DefaultTableCellRenderer() {
                	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                        JTableHeader header = table.getTableHeader();

                        setText(value == null ? "" : value.toString());
                        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
                        setHorizontalAlignment(SwingConstants.CENTER);
                        setHorizontalTextPosition(SwingConstants.LEFT);
                                                
                        if (view.sortColumnDesc[column]) {
                            setIcon(new ImageIcon(getClass().getResource("http://www.tutorials.de/images/up.png")));
                        } else {
                            setIcon(new ImageIcon(getClass().getResource("http://www.tutorials.de/images/down.png")));
                        }
                        
 

                        return this;
                    }
         });
 
Zurück