Hallo!
Ich muss als Übung in Java eine scrollbare Liste machen, die als Tabelle aufgebaut sein soll (TableModel). Die Tabelle soll zwei Spalten haben, eine mit Stringwerten („Alter“) und eine mit Integerwerten („Name“). Zu dieser Liste sollen dann einige Elemente vom Typ „Person“ hinzugefügt werden. Diese „Person“-Typen sind in einer eigenen Klasse definiert. Anschließend soll es möglich sein, die Tabelle per Buttonklick auf- und absteigend nach String- bzw. Integerwerten zu sortieren.
Leider habe ich momentan keine Ahnung, wie ich da überhaupt anfangen soll (ich lerne ja erst Java und hab sowas noch nie gemacht, daher fehlt mir ein bisschen der Plan).
Ich hab schon das Tuturial von Sun zu den Tabellen angesehen und auch einige andere Tuturials zum Thema, aber ich versteh es einfach nicht.
Folgendes bereitet mir konkret Probleme:
1.) Ich bekomme zwar einzelne Eigenschaften der Person in die Tabelle (das wird dann auch korrekt angezeigt; ich mach das mit einem Object[][]), aber ich glaube es sollte doch so sein, dass man das gesamte Objekt „Person“ im TableModel speichert und daraus dann einzelne Werte ausliest, oder? Das schaff ich schonmal nicht.
Wie würde außerdem in so einem Fall die setValue-Methode aussehen?
2.) Das Sortieren (und dafür nötige Vergleichen) per Buttonklick schaff ich somit auch nicht.
Kann mir vielleicht jemand ein bisschen weiter helfen, idealerweise, in möglichst einfachen Worten?
Ein großes Danke schonmal jetzt!
Hier noch ein kleiner Auszug (nicht vollständig!) aus dem Code:
public class Person extends AbstractTableModel {
private String[] columnNames = {"Name", "Alter"};
private Object[][] data = {{"", 0}, {"", 0}};
public void addTableModelListener(TableModelListener l) {}
public Class\> getColumnClass(int columnIndex) {
if (columnIndex==0) return Integer.class;
if(columnIndex==1) return String.class;
return null;
}
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public void removeTableModelListener(TableModelListener l) {}
public void setValueAt(Object value, int rowIndex, int columnIndex)
{
data[rowIndex][columnIndex]=value;
}
und hier werden die Personen eben nicht als ganzes Objekt, sondern mit den einzelnen Eigenschaften der Tabelle hinzugefügt, wobei alle Namen und alle Altersdaten je in einem Array gespeichert werden (was ja höchst aufwendig ist):
int i = 0;
int length = names.length;
while(i
Grüße
Daniel