JTable aktualisert nicht beim 2. Mal - Hilfe

javad

Grünschnabel
JTable aktualisiert nicht

Hallo,

Frage 1: ich habe eine Anwendung, bei der eine JTable je nach SQL-Abfrage neu befüllt werden soll. Die Abfrage wird in ein Array gespeichert und die Kopfspalten auch. Die Abfragen und die Vebindung zur Datanbank (Access) funktionieren. Leider aktualisiert das JTable nicht, wenn ich es das 2 mal fülle. Wenn ich per JButton das Tablemodel nochmals feuere, aktualisiert es. Wenn ich dann aber in eine anderes Windows-Programm wechsle und wieder die Anwendung maximiere, sind wieder die erstmals angezeigten Daten da.
Hab schon gegoogelt und hier etliche Artikel gelesen, aber es geht und geht nicht :(

Frage 2: Ich möchte Abfrage und Table in 2 Dateien speichern. Wie kann ich dateiübergreifend (von Ma.java nach JTable.java) die Arrays übergeben oder Comboboxen neu befüllen. Der Aufruf "Klasse.Combo1.addItem("Wert")" funktioniert nicht.
Bitte helft mir. Vielen Dank im Voraus.

Code Ma.java:

public class Ma extends JFrame{

static Object data[][];​
static String[] columnNames;​
DefaultTableModel model;​

// Ma nach Alter editieren
public static String getMaedit(int alter) {

// Abfrage String - Wie alt? - Verbindung "conn" wurde in MainForm.java hergestellt
strSQL = "select * From ma order by nname where alter = " + alter;​

try {​
stmt = MainForm.conn.createStatement();
ResultSet rsma1 = stmt.executeQuery(strSQL);​
}
catch (SQLException ex) {
}​

String columnNames[] = { "Pers.-ID", "Name", "Vorname", "Urlaub",
"Zugriff", "Status", "Login", "Passwort", "Kennzeichen",
"Erster tag", "Löschen" };

//Array erzeugen[Anzahl Zeilen][Anzahl Spalten]
Object data[][] = new Object[recordsint][11];

// Die Datensätze in Array speichern
int rsma1count = 0;

try {​
while (rsma1.next()) {​

data[rsma1count][0] = rsma1.getObject("maid");
data[rsma1count][1] = rsma1.getString("nname");
data[rsma1count][2] = rsma1.getString("vname");
data[rsma1count][3] = rsma1.getString("uanspr");
data[rsma1count][4] =rsma1.getStting("zugriff");
data[rsma1count][5] =rsma1.getString("gesperrt")
data[rsma1count][6] = rsma1.getString("login");
data[rsma1count][7] = rsma1.getString("pwd");
data[rsma1count][8] = rsma1.getString("kz");
data[rsma1count][9] = rsma1.getString("erstertag");
data[rsma1count][10] = "Löschen";

rsma1count = rsma1count + 1;​
}
rsma1.close();
stmt.close();
conn.close();​
}​

catch (SQLException ex1) {
}​

//Arrays an Table Modell übergeben
createTable(data, columnNames);​
}
return "";
}


// Create table with data and columns
public static String createTable(Object[][] data, String[] columnNames) {

// create table model
model = new DefaultTableModel();
model.setDataVector(data, columnNames);
model.fireTableDataChanged();
model.fireTableStructureChanged();

// give the model to the table
JTable table = new JTable();
table.setModel(model);

JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane, BorderLayout.CENTER);
scrollPane.setBounds(new Rectangle(5, 165, 988, 470));

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

return "";
}​
}
 
Zuletzt bearbeitet:
Hallo javad!

Vielleicht ist das die Lösung!

Frage 1:
private/public String [] columnNames = {"name1","Name2"....};

public void createTable(Object/String [][] data) {
model = new DefaultTableModel(); // oder eine Klasse von DefaultTableModel ableiten!
table= new JTable(model);
model.setDataVector(data, columnNames);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
scrollPane.setViewportView(table);
model.fireTableDataChanged();
}

Und das ScrollPane nur einmal für das Programm im Konstruktor erzeugen und nicht bei jeder Aktualisierung aufs neue dem JFrame hinzufügen.
Also bei mir funktioniert es so ganz gut.

Frage 2:
Wenn ich die Frage richtig verstanden habe, musst du in der Datei JTable.java(Ich nenne die Klasse/Datei mal MA2.java) eine public Methode erzeugen, die Daten empfangen und verarbeiten kann.
d.h.
MA2 empfaenger = new MA2();
empfaenger.erhalteDatenVonMA(Array ,String etc.)

Methode in MA2.java oder JTable.java:

public void erhalteDatenVonMA(String b){
ComboBox1.removeAllItems();
ComboBox1.addItem(b);
}

Evtl. hilft dir das ja schon weiter!
 
Zurück