Bullet1990
Mitglied
Guten Abend,
Ich suche nun schon seit Tagen im Web nach einer Lösung, aber bin wirklich nirgends fündig geworden, also dachte ich, dass ich doch mal frage.
Ich habe eine Programm geschrieben (zumindest sitz ich dran), das eine GUI besitzt.
Dabei handelt es sich um ein einfaches Datenbank-Programm.
Ziel ist es, Daten anzulegen, zu löschen, zu ändern etc.
Bei der Datenbank handelt es sich um eine SQLite-Datenbank.
Mein Problem liegt jedoch bei der JTable, die ich verwende, um die Daten aus der Datenbank anzuzeigen.
Beim Testen durch Eclipse öffnet es sich wie gewollt, die JTable zeigt die gesamten Daten der Datenbank auch wie gewollt an.
Klickt man nun auf den Button "Teil hinzufügen", so öffnet sich ein neues Fenster mit Textfeldern in die man die Daten eingibt.
Wenn man dann bestätigt, werden die Daten in die Datenbank geschrieben.
Genau hier ist mein Problem.
Nach Bestätigung schließt sich mein "Update-Fenster", wie geplant, und auf dem Main-Frame befindet sich noch die alte JTable.
Hier soll nun durch Klick auf den Button "Aktualisieren" die ganze Tabelle aktualisiert werden.
Ich habe es schon mit table.repaint() versucht, in org.apache.commons.dbutils.* gesucht und unzählige anderen Methoden probiert. Jedoch blieb meine JTable unaktualisiert.
Man erhält erst die aktuelle Tabelle, wenn man das Programm schließt und nochmal ausführt.
Hier habt ihr meinen Code:
(Ich lass die Imports und ein paar Buttons, die keinen Einfluss darauf haben, aus, damit der Code hier keinen erschlägt )
Die Klasse Zeile ist dabei eine eine einfache Klasse, die als eine Art Container dient für die Daten einer Zeile aus der Datenbank.
Ich danke schonmal im Vorraus für die Hilfe.
MfG
Ich suche nun schon seit Tagen im Web nach einer Lösung, aber bin wirklich nirgends fündig geworden, also dachte ich, dass ich doch mal frage.
Ich habe eine Programm geschrieben (zumindest sitz ich dran), das eine GUI besitzt.
Dabei handelt es sich um ein einfaches Datenbank-Programm.
Ziel ist es, Daten anzulegen, zu löschen, zu ändern etc.
Bei der Datenbank handelt es sich um eine SQLite-Datenbank.
Mein Problem liegt jedoch bei der JTable, die ich verwende, um die Daten aus der Datenbank anzuzeigen.
Beim Testen durch Eclipse öffnet es sich wie gewollt, die JTable zeigt die gesamten Daten der Datenbank auch wie gewollt an.
Klickt man nun auf den Button "Teil hinzufügen", so öffnet sich ein neues Fenster mit Textfeldern in die man die Daten eingibt.
Wenn man dann bestätigt, werden die Daten in die Datenbank geschrieben.
Genau hier ist mein Problem.
Nach Bestätigung schließt sich mein "Update-Fenster", wie geplant, und auf dem Main-Frame befindet sich noch die alte JTable.
Hier soll nun durch Klick auf den Button "Aktualisieren" die ganze Tabelle aktualisiert werden.
Ich habe es schon mit table.repaint() versucht, in org.apache.commons.dbutils.* gesucht und unzählige anderen Methoden probiert. Jedoch blieb meine JTable unaktualisiert.
Man erhält erst die aktuelle Tabelle, wenn man das Programm schließt und nochmal ausführt.
Hier habt ihr meinen Code:
(Ich lass die Imports und ein paar Buttons, die keinen Einfluss darauf haben, aus, damit der Code hier keinen erschlägt )
Code:
public class TeileGUI {
Lager lager = new Lager();
private JFrame frmAutoLagerbestand;
private JTable table;
static int l = 0;
static Zeile[] results;
/**
* Launch the application.
*/
public static void main(String[] args) {
try{
Class.forName( "org.sqlite.JDBC" );
Connection cn = DriverManager.getConnection( "jdbc:sqlite:/D:/TeileDB.sqlite");
Statement st = cn.createStatement();
String qry = "SELECT COUNT(id) FROM Teile";
ResultSet rs = st.executeQuery(qry);
rs.next();
String count = rs.getString("COUNT(id)");
int c = Integer.parseInt(count);
Zeile [] zeilen = new Zeile[ c];
l = c;
String qry1 = "SELECT * FROM Teile";
ResultSet rs1 = st.executeQuery(qry1);
int index = 0;
while(rs1.next()){
zeilen[index] = new Zeile(rs1.getInt("ID"), rs1.getString("Bezeichnung"),
rs1.getString("Hersteller"),rs1.getString("Modell"),
rs1.getInt("Baujahr"), rs1.getDouble("Preis"), rs1.getInt("Anzahl"), rs1.getString("Ort"));
index++;
}
results = zeilen;
}catch (Exception e)
{
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TeileGUI window = new TeileGUI();
window.frmAutoLagerbestand.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public TeileGUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmAutoLagerbestand = new JFrame();
frmAutoLagerbestand.getContentPane().setFont(new Font("Times New Roman", Font.PLAIN, 12));
frmAutoLagerbestand.getContentPane().setForeground(Color.LIGHT_GRAY);
frmAutoLagerbestand.setTitle("Auto-J\u00E4ger Lagerbestand");
frmAutoLagerbestand.setForeground(Color.BLACK);
frmAutoLagerbestand.setFont(new Font("Calibri", Font.PLAIN, 12));
frmAutoLagerbestand.setBounds(100, 100, 997, 499);
frmAutoLagerbestand.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmAutoLagerbestand.getContentPane().setLayout(null);
JScrollBar scrollBar = new JScrollBar();
scrollBar.setBounds(979, 143, 16, 5);
frmAutoLagerbestand.getContentPane().add(scrollBar);
JButton btnTeilHinzufgen = new JButton("Teil hinzuf\u00FCgen");
btnTeilHinzufgen.setBounds(839, 153, 105, 23);
btnTeilHinzufgen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
frmAdd add = new frmAdd();
l++;
}
});
frmAutojgerLagerbestand.getContentPane().add(btnTeilHinzufgen);
/* Hier hab ich probleme, es passiert nicht das, was ich erreichen will
ich hab erstmal die repaint-Methode stehen lassen, weil das die häufigste Antwort in anderen Foren war */
JButton btnAktualisieren = new JButton("Aktualisieren");
btnAktualisieren.setBounds(854, 115, 75, 23);
btnAktualisieren.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try{
table.repaint();
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
frmAutojgerLagerbestand.getContentPane().add(btnAktualisieren);
JButton btnBeenden = new JButton("Beenden");
btnBeenden.setBounds(854, 385, 75, 23);
btnBeenden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
frmAutojgerLagerbestand.getContentPane().add(btnBeenden);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(59, 69, 747, 339);
frmAutojgerLagerbestand.getContentPane().add(scrollPane);
table = new JTable();
scrollPane.setViewportView(table);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Object[][] matrix = new Object[l][8];
for(int i = 0; i < l; i++)
{
matrix[i][0] = results[i].getID();
matrix[i][1] = results[i].getBezeichnung();
matrix[i][2] = results[i].getHersteller();
matrix[i][3] = results[i].getModell();
matrix[i][4] = results[i].getBaujahr();
matrix[i][5] = results[i].getPreis();
matrix[i][6] = results[i].getAnzahl();
matrix[i][7] = results[i].getOrt();
}
table.setModel(new DefaultTableModel(
matrix,
new String[] {
"ID", "Bezeichnung", "Modell", "Marke", "Baujahr", "Preis", "Anzahl", "Lagerort"
}
));
String [] columnNames = {"ID","Teilbezeichnung","Fahrzeughersteller","Fahrzeugmodell",
"Baujahr","Preis","Anzahl","Lagerort"
};
String [][] rowData = {
{"1","Scheinwerfer","BMW","525i","1998","50","2","Schrottplatz"},
{"2","Reifen","Mercedes-Benz","A-Klasse","2001","35.50","4","Reifenstapel"}
};
}
}
Die Klasse Zeile ist dabei eine eine einfache Klasse, die als eine Art Container dient für die Daten einer Zeile aus der Datenbank.
Ich danke schonmal im Vorraus für die Hilfe.
MfG