HIer mal der Entwurfsquelltext...
Zwecks GUI selbst aktualisieren meine ich, wenn man Zelle selektiert und ändert, dann wird ja beim TableModel "setValue(...) aufgerufen, mit updateString(..) und updateRow wird die Änderung in die Datenbank geschrieben UND automatisch die GUI aktualisiert mit den neuen Daten... Das selbe hätte ich auch gerne wenn ich eine Zeile per Gui in Datenbank einfüge, was ja klappt, nur wird die GUI Nicht automatisch aktualisiert. Das geht irgendwie mit dem TableModelListener, hab ich zumindest in Literatur gelesen, dass dieser verwendet wird, wenn sich Datenquelle ändert, nur wie is mir nicht klar....
package grafik12.table;
import javax.swing.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import javax.swing.event.TableModelEvent;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
//Inhalt einfügen
public class SQLTableDemo3 extends JFrame {
private SQLConnect connect;
private ResultSet rs;
private JTable x;
private TextField id;
private TextField nachname;
private TextField vorname;
private TextField title;
private SQLTableModel3 mod;
public SQLTableDemo3()
{
super ("TestDemo3....");
try {
connect = new SQLConnect();
this.rs = connect.query("Select id AS ID, nachname As NACHNAME, vorname AS VORNAME, title AS TITLE from employees");
mod = new SQLTableModel3(this.rs);
this. x = new JTable(mod);
Panel tab =new Panel();
tab.add(this.x);
this.setLayout(new GridLayout(2,1));
this.getContentPane().add(tab);
Panel unten = new Panel();
id = new TextField(15);
nachname = new TextField(15);
vorname = new TextField(15);
title = new TextField(15);
JButton enter = new JButton("INSERT");
unten.add(id);
unten.add(nachname);
unten.add(vorname);
unten.add(title);
unten.add(enter);
this.getContentPane().add(unten);
enter.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
mod.InsertRow(id.getText(), nachname.getText(), vorname.getText(), title.getText());
}
});
} catch (Exception e) {
System.out.println("Error...."+ e.getMessage());
System.exit(1);
}
}
public static void main (String [] args)
{
SQLTableDemo3 demo = new SQLTableDemo3();
demo.pack();
demo.setVisible(true);
}
}
class SQLTableModel3 extends AbstractTableModel{
private ResultSet result;
private ResultSetMetaData metadata;
private int numrows;
private int numcols;
public SQLTableModel3(ResultSet x)
{
try {
this.result = x;
this.metadata = this.result.getMetaData();
numcols = this.metadata.getColumnCount();
this.result.last();
numrows = this.result.getRow();
} catch (Exception e) {
}
}
public String getColumnName(int column) {
try {
return metadata.getColumnLabel(column+1);
} catch (SQLException e) { return e.toString(); }
}
public void InsertRow(String id, String nachname, String vorname, String title)
{
try {
this.result.moveToInsertRow();
this.result.updateString("id",id);
this.result.updateString("nachname",nachname);
this.result.updateString("vorname",vorname);
this.result.updateString("title",title);
this.result.insertRow();
} catch (Exception e) {
}
}
public int getRowCount() { return this.numrows; }
public int getColumnCount() { return this.numcols; }
public Object getValueAt(int row, int col) {
try {
result.absolute(row+1); // Go to the specified row
Object o = result.getObject(col+1); // Get value of the column
if (o == null) return null;
else return o.toString(); // Convert it to a string
} catch (SQLException e) {System.out.println("SLKJLKFJLKJ"); return e.toString(); }
}
public boolean isCellEditable(int row, int col)
{ return true; }
//
public void setValueAt(Object value, int row, int col) {
try{
result.absolute(row+1);
result.updateString(col+1,value.toString());
result.updateRow();
}catch(SQLException sqle){
System.err.println("Error setting value at row "+row+" column "+col+" with value "+value);
sqle.printStackTrace();
}
catch (Exception e){System.out.println("Error .."+ e.getMessage());}
}
public Class getColumnClass(int column) { return String.class; }
}