Hallo. Ich bin gerade am Problem, dass ich zum ersten mal mit JTables arbeite und nicht genau weiß wie ich meien Daten in die Table bekomme.
Soweit habe ich eine Anwendung erstellt nach dem MVC Pattern und DAO Pattern, damit ich Daten, welche ich wiedergeben will, aus der Datenbank abfragen kann.
Das Problem nun: Ich habe ein AbstractTableModel erstellt welches das DefaultTableModel extended.
Dazu habe ich auch schon einen TableModelListener (Interface) erstellt.
Allerdings kann ich 1. nicht meinen selbst erstellten TableModelListener beim Aufruf der Methode "addtableModelListener" im AbstractTableModel als Parameter übergeben, sondern nur den default TableModelListener. Versuche ich mein Interface zu übergeben, bekomme ich folgende Meldung: "The method addTableModelListener(TableModelListener) in the type TableModel is not applicable for the arguments (new TableModelListener(){})"
2. Meine AbstractTableModel Klasse wird so wie sie ist aufgerufen und meine Daten werden Zeile nach Zeile in der for-Schleife hinzugefügt. Allerdings wird die View nicht upgedated.
Könnte mir jemand sagen was ich hier genau falsch mache? Leider finde ich nicht viel zum Verwenden von TableModels und TableModelListeners, die dem MVC Pattern folgen.
Soweit habe ich eine Anwendung erstellt nach dem MVC Pattern und DAO Pattern, damit ich Daten, welche ich wiedergeben will, aus der Datenbank abfragen kann.
Das Problem nun: Ich habe ein AbstractTableModel erstellt welches das DefaultTableModel extended.
Code:
public class AbstractTableModel extends DefaultTableModel{
/**
*
*/
private static final long serialVersionUID = -7354466553311529134L;
private static Logger logger = Logger.getLogger(AbstractTableModel.class);
private static String col[] = { "Tabelle", "UpdateCols", "AlterAuth",
"DeleteAuth", "IndexAuth", "InsertAuth", "SelectAuth", "UpdateAuth" };
private static DefaultTableModel tableModel = new DefaultTableModel(null, col);
private static JTable table = new JTable(tableModel);
public static JTable updateTable(DatenbankDaoImpl db) throws SQLException, IOException {
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
logger.debug(e);
}
});
while (table.getRowCount() > 0) {
((DefaultTableModel) table.getModel()).removeRow(0);
}
for (DatenbankBean db1 : db.getDatenbank()) {
String tabelle = db1.getTabelle();
String updatecols = db1.getUpdatecols();
String alterauth = db1.getAlterauth();
String deleteauth = db1.getDeleteauth();
String indexauth = db1.getIndexauth();
String insertauth = db1.getInsertauth();
String selectauth = db1.getSelectauth();
String updateauth = db1.getUpdateauth();
Object[] data = {tabelle, updatecols, alterauth, deleteauth, indexauth, insertauth, selectauth, updateauth};
tableModel.addRow(data);
logger.debug("AbstractTableModel: " + data.toString());
}
// table.repaint();
return table;
}
}
Dazu habe ich auch schon einen TableModelListener (Interface) erstellt.
Code:
import java.util.EventListener;
import javax.swing.event.TableModelEvent;
public interface TableModelListener extends EventListener{
public void tableChanged(TableModelEvent e);
}
Allerdings kann ich 1. nicht meinen selbst erstellten TableModelListener beim Aufruf der Methode "addtableModelListener" im AbstractTableModel als Parameter übergeben, sondern nur den default TableModelListener. Versuche ich mein Interface zu übergeben, bekomme ich folgende Meldung: "The method addTableModelListener(TableModelListener) in the type TableModel is not applicable for the arguments (new TableModelListener(){})"
2. Meine AbstractTableModel Klasse wird so wie sie ist aufgerufen und meine Daten werden Zeile nach Zeile in der for-Schleife hinzugefügt. Allerdings wird die View nicht upgedated.
Code:
public class MainWindowView extends JFrame {
private JTable table = new JTable(new AbstractTableModel());
//Konstruktor
public MainWindowView(MainWindowModel model) {
super();
JPanel content = new JPanel();
content.setLayout(new FlowLayout());
this.setContentPane(content);
this.add(new JScrollPane(table));
table.getModel().addTableModelListener(table);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
Könnte mir jemand sagen was ich hier genau falsch mache? Leider finde ich nicht viel zum Verwenden von TableModels und TableModelListeners, die dem MVC Pattern folgen.