Hallo,
ich habe eine Tabelle vom Typ jTable. Die Tabelle benutzt ein eigenes TableModel.
(Das TableModel kommt aus einem Tutorial im Netz)
Der TableSorter kommt hier her:
java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/TableSorter.java
Das Funzt soweit ganz gut.
Nun will ich aber nicht immer (eigentlich nie) feste Daten in der Tabelle haben. Ich stelle Daten aus der DB da. Zur Laufzeit werden diese Daten geupdated. D.h. die Tabelle muss zur Laufzeit mit neuen Daten versehen werden können. Ich hatte mal eine Version Programmiert, in der ich data und columnNames mit einer Set Methode zuweisen konnte. Anschließend habe ich die Tabelle einfach neu instantiiert. Leider hat das nicht gefunzt (hat nur relativ lange Pausen gegeben und dann sah die Tabelle aus wie zuvor
).
Ich habe mich schon durch die Hilfe geschlagen, konnte aber kein Beispiel für die Lösung meines Problem finden.
Kurz: Wie implementiere ich am besten eine Methode, die es mir erlaubt zur Laufzweit die Daten der Tabelle möglichst performant zu ändern?
Danke!
ich habe eine Tabelle vom Typ jTable. Die Tabelle benutzt ein eigenes TableModel.
Code:
TableSorter sorter = new TableSorter(new MyTableModel());
jTTable = new JTable(sorter) {
Code:
import java.util.Date;
import javax.swing.table.AbstractTableModel;
public class MyTableModel extends AbstractTableModel {
String[] columnNames = {"First Name",
"Last Name",
"Day of birth",
"Sport",
"# of Years",
"Vegetarian"};
Object[][] data = {
{"Mary", "Campione", new Date(System.currentTimeMillis()) ,"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml", new Date(System.currentTimeMillis()) ,"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath", new Date(System.currentTimeMillis()) ,"Knitting", new Integer(2), new Boolean(false)},
{"Sharon", "Zakhour", new Date(System.currentTimeMillis()) ,"Speed reading", new Integer(20), new Boolean(true)},
{"Philip", "Milne", new Date(System.currentTimeMillis()) ,"Pool", new Integer(10), new Boolean(false)}
};
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
// Don't need to implement this method unless your table's
// editable.
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 3) {
return false;
} else {
return true;
}
}
// Don't need to implement this method unless your table's
// data can change.
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
public String[] getColumnNames() {
return columnNames;
}
public void setColumnNames(String[] columnNames) {
this.columnNames = columnNames;
fireTableDataChanged();
}
public Object[][] getData() {
return data;
}
public void setData(Object[][] data) {
this.data = data;
fireTableDataChanged();
}
}
Der TableSorter kommt hier her:
java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/TableSorter.java
Das Funzt soweit ganz gut.
Nun will ich aber nicht immer (eigentlich nie) feste Daten in der Tabelle haben. Ich stelle Daten aus der DB da. Zur Laufzeit werden diese Daten geupdated. D.h. die Tabelle muss zur Laufzeit mit neuen Daten versehen werden können. Ich hatte mal eine Version Programmiert, in der ich data und columnNames mit einer Set Methode zuweisen konnte. Anschließend habe ich die Tabelle einfach neu instantiiert. Leider hat das nicht gefunzt (hat nur relativ lange Pausen gegeben und dann sah die Tabelle aus wie zuvor
Ich habe mich schon durch die Hilfe geschlagen, konnte aber kein Beispiel für die Lösung meines Problem finden.
Kurz: Wie implementiere ich am besten eine Methode, die es mir erlaubt zur Laufzweit die Daten der Tabelle möglichst performant zu ändern?
Danke!