TableModel von JTable wieder entfernen

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Moin moin,

Ich weiss es ist noch früh am Morgen, aber....

Bei Klick auf einen Button wird einer Klasse (welche eine SQL-Abfrage ausführt und ein TableModel zurückliefert)
das SQL-Statement übergeben und das zurückgelieferte TableModel einem JTable übergeben. Anschliessend setze ich noch die Spaltenbreite passend. Das sieht so aus:
Code:
public void actionPerformed(ActionEvent evt) {
            if (evt.getSource() == connectButton) {
               new Thread(){
                  public void run(){
                     table.setModel(myDB_Access.getTableDataFromQuery(myQryGetData));
                     setTableSize();
                  }
               }.start();
            }
         }
Funzt alles ganz prima. Jetzt kommts. Wenn ich nun
Code:
if (evt.getSource() == createButton) {
            imageButton.setVisible(true);
            DefaultTableModel myModel = myDB_Access.getTableDataFromQuery(myQryGetAll);
         }
mache, also anderer Button, anderes SQL-Statement, kein table.setModel() dann wird trotzdem das JTable aktualisiert, obwohl ich eigentlich nur das zurückgelieferte TableModel auswerten möchte.
Falls es daran liegt, das ein einmal gesetztes Model für ein JTable, dieses immer wieder quasi automatisch aktualisiert, wie kann ich dann das Model wieder removen?
Ich hoffe, dass war einigermaßen verständlich.

Danke für jede Hilfe im voraus.
 

Sky

Top Contributor
Hallo,

sag mal erzeugst Du in der Klasse myDB_Access immer ein neues Model mit 'new'?

Falls nein, so hat das Model in myDB_Access durch 'setModel' eine Referenz und die Table wird dadurch quasi automatisch aktualisiert.

Grüsse, Sky
 
G

Guest

Gast
sky80 hat gesagt.:
sag mal erzeugst Du in der Klasse myDB_Access immer ein neues Model mit 'new'?

Jau, mach ich. Hier mal der gekürzte Code der Klasse:
Code:
public class DB_Zugriff {

    private String             cfn, connect, qry;
    private Connection         con;
    private Statement          stmt;
    private ResultSet          resultSet;
    private ResultSetMetaData  rsmd         = null;
    private DefaultTableModel  tableModel   = new DefaultTableModel();
    private int                clmCnt       = -1;

    public DB_Zugriff (String classForName, String connection) {
       cfn     = classForName;
       connect = connection;
    }

    public DefaultTableModel getTableDataFromQuery(String qryForTable) {
       qry = qryForTable;
       try {
          Class.forName(cfn);
          con       = DriverManager.getConnection(connect);
          stmt      = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
          resultSet = stmt.executeQuery(qry);
          rsmd      = resultSet.getMetaData();
          clmCnt    = rsmd.getColumnCount();
       }
       catch (SQLException e) {
          JOptionPane.showMessageDialog(null,
                                        "Fehler beim Initialisieren der Tabelle.\n\n" + e,
                                        "Fehler",
                                        JOptionPane.ERROR_MESSAGE);
       }
       catch (ClassNotFoundException e) {
          JOptionPane.showMessageDialog(null,
                                        e,
                                        "Fehler",
                                        JOptionPane.ERROR_MESSAGE);
       }

       if (rsmd == null || clmCnt == -1) {throw new RuntimeException("Keine Metadaten aus Abfrage vorhanden");}

       try {//TableModel füllen
          resultSet.first();
          resultSet.last();
          int rowCnt = resultSet.getRow();
          resultSet.first();
          Object[][] tblData = new Object[rowCnt][clmCnt];
          Object[] clmHeaders = new Object[clmCnt];
          for (int i = 1; i <= clmCnt; i++) {
             clmHeaders[i - 1] = rsmd.getColumnName(i);
          }
          int row = 0;
          boolean isValid = true;
          while (isValid) {
             for (int i = 1; i <= clmCnt; i++) {
                tblData[row][i - 1] = resultSet.getString(i);
             }
             row++;
             isValid = resultSet.next();
          }
          tableModel.setDataVector(tblData, clmHeaders);
          resultSet.close();
          stmt.close();
          con.close();
       }
       catch (SQLException e1) {
          JOptionPane.showMessageDialog(null,
                                        "Fehler beim Füllen des Tabellen-Modells.\n\n" + e1,
                                        "Fehler",
                                        JOptionPane.ERROR_MESSAGE);
       }
    return tableModel;
    }

Kann ich denn das TableModel quasi wieder removen um eine Aktualisierung des JTable zu verhindern, oder habe ich hier einen Denkfehler drin?
Die Aktualisierung des JTable ist zwar kein eigentlicher Fehler aber an dieser Stelle unschön und eben nicht gewünscht.
 
G

Gast

Gast
Der Aufruf erfolgt in meiner Hauptklasse (welche das TableModel dem JTable zuordnet) natürlich nur einmal

Code:
DB_Zugriff myDB_Access = new DB_Zugriff("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:Test");
 

foobar

Top Contributor
Du solltest den Datenbankzugriff und das TableModel in verschiedene Klassen aufteilen, dadurch wird das ganze viel Übersichtlicher.
 
G

Gast

Gast
foobar hat gesagt.:
Du solltest den Datenbankzugriff und das TableModel in verschiedene Klassen aufteilen, dadurch wird das ganze viel Übersichtlicher.

Jau, mach ich. Aber wie verhält es sich denn nun mit dem TableModel? Muss ich tatsächlich eine neue Instanz bilden, wenn ich ein TableModel haben will welches nicht mit dem JTable quasi verbunden ist, oder kann ich auch sowas wie table.setModel(kein Model); machen?
 
B

Beni

Gast
Du könntest ein TableModel mit 0 Inhalt übergeben, denn soviel ich weiss geht "setModel( null )" nicht.
 
G

Gast

Gast
Beni hat gesagt.:
denn soviel ich weiss geht "setModel( null )" nicht.

Korrekt. Wenn man das macht, wird man vom Compiler ausgebuuuht. Na ja, also entweder ich mach das mit dem leeren Model, oder ich instanziere das Ganze zweimal, also einmal ein TableModel für das JTable und einmal ein TableModel nur zum auswerten. Wenn das JTable immer aktualisiert wird wenn ich der Klasse, die das TableModel erstellt eine SQL-Abfrage übergebe, sieht das irgendwie Sch... aus. Dann lieber ne zweite Instanz nur zum Auswerten.
 

Sky

Top Contributor
Beschreib doch mal bitte genau das Problem, warum Du ein Model zum Anzeigen und eines zum Auswerten brauchst... werde daraus nicht wirklich schlau im Moment.

In deinem Code habe ich gesehen, dass Du genau ein TableModel hast. Wenn Du diese setzt hat die JTable eine Referenz auf das Objekt und wenn das Objekt geändert wird, ändert sich dadurch auch logischerweise die Table.

Grüsse, Sky
 
G

Guest

Gast
sky80 hat gesagt.:
Wenn Du diese setzt hat die JTable eine Referenz auf das Objekt und wenn das Objekt geändert wird, ändert sich dadurch auch logischerweise die Table.

Genau das ist es. Ich muss also nur einmal das TableModel dem JTable zuweisen.

Wofür ich das brauche:
Zunächst wird wie gesagt eine SQL-Abfrage an meine Klasse übergeben, welche ein TableModel liefert, welches ich dem JTable zuweise. Somit kann der User sehen, welche (für ihn relvanten) Daten aktuell in der DB stehen.

Dann macht der User (mittels Textfelder usw.) einige Änderungen.....

Zum Schluß setzt mein Prog dann nochmals eine SQL-Abfrage ab. Jetzt kommt's: Das daraus entstehende TableModel wird ausgewertet, indem der Inhalt in eine Textdatei geschrieben wird. Hierbei ist es also völlig unnötig, das JTable nochmals upzudaten. Das interessiert an dieser Stelle nicht.

Ich hoffe, jetzt ist's etwas klarer.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
W Neues TableModel und JTable wird nicht refreshed AWT, Swing, JavaFX & SWT 3
D Swing JTable TableModel + RowCount AWT, Swing, JavaFX & SWT 18
N Swing Eintrag in JTable an dessen TableModel weiterreichen AWT, Swing, JavaFX & SWT 3
K JTable +TableModel --> Anpassung der Tabellengröße (Zeilenanzahl) AWT, Swing, JavaFX & SWT 3
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
E JTable und tablemodel Verständnisproblem AWT, Swing, JavaFX & SWT 3
R JTable - TableModel AWT, Swing, JavaFX & SWT 6
D JTable - TableColumnModel - TableModel AWT, Swing, JavaFX & SWT 3
S JTable nimmt TableModel nicht an AWT, Swing, JavaFX & SWT 4
G JTable - TableModel aus ArrayList AWT, Swing, JavaFX & SWT 8
A JTable, eigenes TableModel und dessen Objekte AWT, Swing, JavaFX & SWT 4
G Frage zu JTable und TableModel AWT, Swing, JavaFX & SWT 4
G JTable, TableModel und CellRenderer AWT, Swing, JavaFX & SWT 3
G jTable + ScrollPane (+ TableModel) AWT, Swing, JavaFX & SWT 7
P JTable TableModel JFreeReport AWT, Swing, JavaFX & SWT 4
T anlegen einer jTable mit TableModel AWT, Swing, JavaFX & SWT 3
C TableModel zugehörige Table ermitteln AWT, Swing, JavaFX & SWT 3
E Eigenes TableModel für ArrayList<String[]> AWT, Swing, JavaFX & SWT 5
JAVAnnik Problem mit TableModel AWT, Swing, JavaFX & SWT 3
S Swing Setzen von TableModel liefert NullPointer AWT, Swing, JavaFX & SWT 6
S TableModel Header wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
K verständnissproblem mit TableModel AWT, Swing, JavaFX & SWT 2
K zwei TableModel AWT, Swing, JavaFX & SWT 9
hdi Swing Komisches Problem mit TableModel & setAutoCreateRowSorter AWT, Swing, JavaFX & SWT 2
E Swing TableModel fireTableDataChanged führt zu IndexOutOfBoundsException AWT, Swing, JavaFX & SWT 9
F Tablemodel zu mehreren Tabellen AWT, Swing, JavaFX & SWT 6
K TableModel mit Daten aus Datenbank füllen AWT, Swing, JavaFX & SWT 7
K TableModel Daten übergeben AWT, Swing, JavaFX & SWT 9
X Swing Daten aus Vector ins TableModel ?? AWT, Swing, JavaFX & SWT 12
C Kann Konstruktor von eigenem TableModel nicht nutzen AWT, Swing, JavaFX & SWT 2
D eigenes Tablemodel, Zeile löschen ArrayindexOOB excp AWT, Swing, JavaFX & SWT 4
P Eigenes TableModel abgeleitet von AbstractTableModel (neue rows nicht sichtbar) AWT, Swing, JavaFX & SWT 6
S Table oder TableModel so ueberschreiben, dass Columns minimale Breite haben? AWT, Swing, JavaFX & SWT 2
D Mehrere CheckBoxen im TableModel wechselseitig ausschließen AWT, Swing, JavaFX & SWT 5
R TableModel und Columnmodel - Zusammenspiel? AWT, Swing, JavaFX & SWT 2
G TableModel mit anderen Spalten AWT, Swing, JavaFX & SWT 4
D TableModel + Daten bearbeiten + Daten zurückschreiben AWT, Swing, JavaFX & SWT 9
O TableModel AWT, Swing, JavaFX & SWT 12
V Vector->TableModel->RowSorter:Bei Markierung Index im AWT, Swing, JavaFX & SWT 2
S Daten aus editierbaren TableModel lesen AWT, Swing, JavaFX & SWT 7
F TableModel Spaltenkoepfe benamen, wie? AWT, Swing, JavaFX & SWT 2
F Wie MouseListener bei TableModel anmelden? AWT, Swing, JavaFX & SWT 3
R DataVector bei TableModel - Class Cast Exception AWT, Swing, JavaFX & SWT 9
N TableModel mit CheckBox? AWT, Swing, JavaFX & SWT 5
J Tablemodel AWT, Swing, JavaFX & SWT 2
D invokeLate bei änderung im TableModel? AWT, Swing, JavaFX & SWT 4
G TableModel auswerten und in Datei schreiben AWT, Swing, JavaFX & SWT 3
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben