package gui; import javax.swing.table.AbstractTableModel; import javax.swing.event.TableModelEvent; import java.util.Collections; import java.util.Comparator; import java.util.ArrayList; public class SortModel extends AbstractTableModel{ private String[] names; public String[][] data; public SortModel(){ } public SortModel(String[][] _data, String[] _names){ data = _data; names = _names; } // Die Anzahl Columns public int getColumnCount() { return names.length; } // Die Anzahl Rows public int getRowCount() { return data.length; } // Die Titel der einzelnen Columns public String getColumnName(int column) { return names[column]; } // Der Wert der Zelle (rowIndex, columnIndex) public Object getValueAt(int rowIndex, int columnIndex) { try{ return new String(data[rowIndex][columnIndex]); } catch(ArrayIndexOutOfBoundsException e){ System.out.println("zulanges array^^ "+rowIndex+" / "+columnIndex); } return new String("aha^^"); } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { data[rowIndex][columnIndex] = aValue.toString(); fireTableChanged(new TableModelEvent(this, rowIndex, rowIndex, columnIndex)); } public void sort (int spalte) { ArrayList tosort = new ArrayList (); for(int i = 0; i != data.length; i++){ tosort.add(data[i]); } Collections.sort(tosort, new WarenComparator (spalte)); for(int i = 0; i != data.length; i++){ data[i] = tosort.get(i); } } public void invsort (int spalte) { ArrayList tosort = new ArrayList (); for(int i = 0; i != data.length; i++){ tosort.add(data[i]); } Collections.sort(tosort, new WarenComparator (spalte)); Collections.reverse(tosort); for(int i = 0; i != data.length; i++){ data[i] = tosort.get(i); } } private class WarenComparator implements Comparator { private final int spalte; public WarenComparator (final int spalte) { this.spalte = spalte; } public int compare(Object o1, Object o2) { if (o1 == null && o2 == null) { return 0; } else if (o1 == null) { return 1; } else { switch (this.spalte) { case 0 : return (getNummer((String[])o1).compareToIgnoreCase(getNummer((String[])o2))); case 1 : return (getName((String[])o1).compareToIgnoreCase(getName((String[])o2))); case 2 : return (getHerkunft((String[])o1).compareToIgnoreCase(getHerkunft((String[])o2))); case 3 : return (getBeschreibung((String[])o1).compareToIgnoreCase(getBeschreibung((String[])o2))); case 4 : return (getPreis((String[])o1).compareTo(getPreis((String[])o2))); case 5 : return (getGesamtPreis((String[])o1).compareTo(getGesamtPreis((String[])o2))); default : return 0; } } } private String getNummer(String[] temp){ return temp[0]; } private String getName(String[] temp){ return temp[1]; } private String getHerkunft(String[] temp){ return temp[2]; } private String getBeschreibung(String[] temp){ return temp[3]; } private Double getPreis(String[] temp){ return Double.parseDouble(temp[4]); } private Double getGesamtPreis(String[] temp){ return Double.parseDouble(temp[5]); } } }