Wie machen JTable anzeigen aktualisierten Daten nach der Aktualisierung der Datenbank?
Ich habe aktualisiert eine Datenbank und ich möchte zu aktualisieren, eine JTable
mit diesem code gebunden, um eine Schaltfläche click-Ereignis, aber es funktioniert nicht. Wenn ich die Anwendung schließen und wieder öffnen JTable
zeigt die richtigen Daten.
Muss ich überschreiben-Methode auf meine Zusammenfassung Tabelle?
try {
model=new MyTableModel(this.database);
table = new JTable(model);
} catch (SQLException e) {
e.printStackTrace();
}
scrollPane = new JScrollPane(table);
refresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((MyTableModel)table.getModel()).fireTableDataChanged();
}
});
class MyTableModel extends AbstractTableModel {
private int i;
private String[] columnNames = { "ID", "Code", "Country", "Radio",
"primljeno", "select" };
private Object[][] data = { { new Integer(0), "", "", "", "",
new Boolean(false) } };
public MyTableModel(My_class_Database database)throws SQLException {
init(database);
}
public void init(My_class_Database database) throws SQLException
{
this.i = database.checkIsDataThere();
Object[][] object;
if (i == 0) {
object = new Object[i][7];
object = database.getDatafromDatabase(this.i);
this.data = object;
dataAp = object;
} else {
object = database.getDatafromDatabase(this.i);
textField.setText("No data in database");
}
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public String getColumnName(int col) {
return columnNames[col];
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
//problem sa null vrijednostima,null exception
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col > 4) {
return true;
} else
return (false);
}
}
Eine Möglichkeit ist zum Lesen der Daten aus der Datenbank und erstellen Sie ein neues TableModel. Dann können Sie mit JTable.setModel () - Methode.
Es hat funktioniert,danke!
Schwer zu sagen ohne code. Bitte post wieder ein SSCCE und lassen Sie es uns wissen.
Hinzugefügt my_model Umsetzung
Es hat funktioniert,danke!
Schwer zu sagen ohne code. Bitte post wieder ein SSCCE und lassen Sie es uns wissen.
Hinzugefügt my_model Umsetzung
InformationsquelleAutor Programmer Apprentice | 2013-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als es ist (post-code) das Modell ist nicht bekannt, die änderung in der Datenbank. Sie können entweder aktualisieren Sie die Daten in das Modell, wie etwa das aufrufen von bestehenden
init()
Methode oder ein ähnliches. Als alternative können Sie erstellen ein neues Modell und setzen Sie es auf den Tisch.Es liegt in der Verantwortung des Modells, um das Feuer Benachrichtigungen wie
fireTableDataChanged
dass Sie inactionPerformed
. Tabelle Kunden sollte nicht führen Sie diese Methoden.fireTableDataChanged
gehört zuinit()
- Methode zum Beispiel. Sehen Brenn-Change-Events für mehr details und Beispiele.Das Modell sollte über Daten, so ist es am besten, wenn Sie bewegen Sie die Logik der Einstellung
textField
aus dem Modell. Wenn nötig, können Sie stellen weitere Methoden aus dem Modell zu helfen, Kunden erhalten zusätzliche Informationen über Daten und Zustand.InformationsquelleAutor tenorsax
Diese link enthält eine ähnliche Diskussion, dass könnte genau das sein was du suchst. Die Antwort von user "nkvnkv" hat ein Interessantes Konzept.
Cheers.
InformationsquelleAutor K33p3r
Viele Dinge versucht, aber schließlich für mich gearbeitet:
Entfernte ich alle Zeilen der JTable und wieder genannt setTableValue Methode, um re-füllen der Tabelle.
InformationsquelleAutor Azam Khan