Hi alle zusammen,
ich beschäftige mich erst seit kurzem mit Datenbankprogrammierung und hab es zumindest mal so weit geschafft, dass ich Daten über die Benutzeroberfläche anlegen kann und den aktuellen Inhalt der Tabelle in einem JTable in einem ScrollPane anzeige.
Mein Problem..
In der Applikation geht es einfach darum Bücher anzulegen, diese werden in einer Tabelle in einer mySql Datenbank gespeichert.
Nun möchte ich, sobald ich ein neues Buch anlege, dass die Tabelle, in der die Bücher angezeigt werden aktualisiert sind.
Dies funktioniert noch nicht so ganz...
Ich habe zwar gegoogelt und einiges darüber gelesen, dass man z.B. für DefaultTableModel die Methode fireTableDataChanged() aufrufen soll, oder den table "repaint()"en soll. Habe auch versucht dies zu implementieren aber so ganz will das nicht.
Anbei mein Code
In dieser Klasse erstelle ich den table und füge die Daten aus der Datenbank ein.
In dieser Klasse wird der JButton instanziert und mit einem Listener versehen:
Hier ein Auszug aus der main klasse wo ich das scrollPane dem Frame hinzufüge
Habe mir überlegt, dass ich vl eventuell sogar den Table aktualisiere, nur die Anzeige nicht? Hier gibt es doch bestimmt eine einfachere Lösung als scrollpane entfernen und neu berechnen und hinzufügen?
Danke schon Mal!
ich beschäftige mich erst seit kurzem mit Datenbankprogrammierung und hab es zumindest mal so weit geschafft, dass ich Daten über die Benutzeroberfläche anlegen kann und den aktuellen Inhalt der Tabelle in einem JTable in einem ScrollPane anzeige.
Mein Problem..
In der Applikation geht es einfach darum Bücher anzulegen, diese werden in einer Tabelle in einer mySql Datenbank gespeichert.
Nun möchte ich, sobald ich ein neues Buch anlege, dass die Tabelle, in der die Bücher angezeigt werden aktualisiert sind.
Dies funktioniert noch nicht so ganz...
Ich habe zwar gegoogelt und einiges darüber gelesen, dass man z.B. für DefaultTableModel die Methode fireTableDataChanged() aufrufen soll, oder den table "repaint()"en soll. Habe auch versucht dies zu implementieren aber so ganz will das nicht.
Anbei mein Code
In dieser Klasse erstelle ich den table und füge die Daten aus der Datenbank ein.
Java:
package GraphicComponents;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import model.database;
public class OutputTable {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
public static JTable table;
private static DefaultTableModel model;
public OutputTable() {
// TODO Auto-generated constructor stub
}
public static JScrollPane output() {
Connection conn = null;
java.sql.Statement stmt = null;
JScrollPane scrollPane = new JScrollPane();
// JDBC Treiber registrieren
try {
Class.forName(JDBC_DRIVER);
conn = database.connection();
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select book_name,book_author,book_number,book_shelf from bookinformation");
// Create and display the table
table = new JTable(buildTableModel(rs));
scrollPane = new JScrollPane();
scrollPane.setViewportView(table);
} catch(SQLException | ClassNotFoundException e) {
}
return scrollPane;
}
public static DefaultTableModel buildTableModel(ResultSet rs) throws SQLException {
// names of columns
Vector<String> cols = new Vector<String>();
String[] columnNames = { "Title", "Author", "ISBN Nr", "Shelf" };
int columnCount = 4;
for (int column = 0; column < columnCount; column++) {
cols.add(columnNames[column]);
}
// data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
model = new DefaultTableModel(data,cols);
return model;
}
public static void refreshTable() {
model.fireTableDataChanged();
}
}
In dieser Klasse wird der JButton instanziert und mit einem Listener versehen:
Java:
JButton addBookButton = new JButton("Add Book");
addBookButton.setVisible(true);
addBookButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
database.sqlQueries(bName.getText(), bAuthor.getText(), bNumber.getText(), bShelf.getText()); //Insert Statement fuer die DB!
JOptionPane.showMessageDialog(null, "Das Buch wurde erfolgreich angelegt!");
OutputTable.refreshTable();
}
});
Hier ein Auszug aus der main klasse wo ich das scrollPane dem Frame hinzufüge
Java:
c.anchor = GridBagConstraints.LAST_LINE_START;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 1;
c.weightx = 0.3;
c.weighty = 0.3;
GUI.scrollPane = OutputTable.output();
this.add(scrollPane,c );
Habe mir überlegt, dass ich vl eventuell sogar den Table aktualisiere, nur die Anzeige nicht? Hier gibt es doch bestimmt eine einfachere Lösung als scrollpane entfernen und neu berechnen und hinzufügen?
Danke schon Mal!