JTable aktualisieren

Status
Nicht offen für weitere Antworten.

gondor

Bekanntes Mitglied
hallo!

leider habe ich ein problem. dieses sieht in etwa so aus:

ich habe 2 buttons mit denen ich werte in eine JTable fülle und diese auf die GUI anzeigen lasse:

Code:
void Appl_jButton_loadTable_actionPerformed(ActionEvent e) {

    table = new JTable();
    scrollPane = new JScrollPane(table);
    /*Tabellen-Modell erzeugen*/
    table.setModel(ctrl_measurement.getDataForTable(3600));
    /*Tabellen-Modell + ScrollPane auf Panel setzen*/
    jPanel7.add(scrollPane, BorderLayout.CENTER);

    /*Update der GUI (Tabelle)*/
    contentPane.updateUI();
  }

hier werden 3600 werte in die JTable geschrieben

Code:
void Appl_jButton_30min_actionPerformed(ActionEvent e) {

    table = new JTable();
    scrollPane = new JScrollPane(table);
    /*Tabellen-Modell erzeugen*/
    table.setModel(ctrl_measurement.getDataForTable(60));
    /*Tabellen-Modell + ScrollPane auf Panel setzen*/
    jPanel7.add(scrollPane, BorderLayout.CENTER);

    /*Update der GUI (Tabelle)*/
    contentPane.updateUI();
    table.updateUI();
    scrollPane.updateUI();
  }

hier werden 60 werte in die JTable geschrieben

mein Problem ist leider, dass sich die JTable nicht 'neu' aufbaut. also, wenn ich zuvor die 3600 werte aufrufe zeigt er diese korrekt an, aber sobald ich danach nur 60 werte haben will, zeigt er immer noch die 3600 werte an, obwohl er das TableModel mit 60 werten richtig erzeugt. hm... reicht da nicht das updateUI?

wo liegt hier das problem?

gondor(..)
 

gondor

Bekanntes Mitglied
hm... da hat sich schon was getan. wenn ich nun den 2. button drücke werden zwar 60 werte in die JTAble gesetzt, sobald ich aber den scrollbalken 'berühre' und nach unten scrollen will, werden plötzlich wieder 3600 werte angezeigt.

also sobald ich auf das jTable bzw. ScrollPane klicke kommt die 'alte' tabelle wieder

ganz komisch...

gondor(..)

ps: danke für deine schnelle antwort ;)
 

gondor

Bekanntes Mitglied
auch wenn ich die referenz vorher auf 'null' setze passiert leider nichts:

Code:
  void Appl_jButton_loadTable_actionPerformed(ActionEvent e) {

    table = null;
    scrollPane = null;

    table = new JTable();
    scrollPane = new JScrollPane(table);

    /*Tabellen-Modell erzeugen*/
    table.setModel(ctrl_measurement.getDataForTable(3600));
    /*Tabellen-Modell + ScrollPane auf Panel setzen*/
    jPanel7.add(scrollPane, BorderLayout.CENTER);

    /*Update der GUI (Tabelle)*/
    table.validate();
    scrollPane.validate();
    contentPane.validate();
  }

Code:
void Appl_jButton_30min_actionPerformed(ActionEvent e) {

    table = null;
    scrollPane = null;

    table = new JTable();
    scrollPane = new JScrollPane(table);

    /*Tabellen-Modell erzeugen*/
    table.setModel(ctrl_measurement.getDataForTable(50));
    /*Tabellen-Modell + ScrollPane auf Panel setzen*/
    jPanel7.add(scrollPane, BorderLayout.CENTER);

    /*Update der GUI (Tabelle)*/
    table.validate();
    scrollPane.validate();
    contentPane.validate();
  }

noch wer ´ne idee?

gondor(..)
 

thE_29

Top Contributor
liefern deine Funktionen das richtige zurück?

table.setModel(ctrl_measurement.getDataForTable(3600));

und

table.setModel(ctrl_measurement.getDataForTable(60));
 

gondor

Bekanntes Mitglied
@thE_29

also, wenn du die anzahl der zeilen meinst schon:


Code:
 System.out.println(ctrl_sql_measurement.getDataForTable(range_).getRowCount());

bei einer range von 3600 gibt die function: 3600 zurück (bei 60 halt 60 rows)

hm... woran könnte es liegen?

übergeben wird ein 'DefaultTableModel' an die Table:

Code:
table.setModel(ctrl_measurement.getDataForTable(60));

die tabelle wird ja bei einen button-druck korrekt angezeit, doch sobald ich da in die tabelle klicke oder den scrollbalken betätige kommt die tabelle wieder, die beim ersten ausführen angezeigt wurde.

danke für die hilfe!

gondor(..)
 

thE_29

Top Contributor
mh, sehr komisch!

vielleicht hast du bei der implementation von getValue was falsch gemacht, das er obwohl du auf 60 sagst, er trotzdem alles durchgeht! Oder irgendwo er etwas falsches hat.

oder der Fehler liegt woanders ;)

Aber schau dir deine get Methoden usw an, ob du dir da auch irgendwie merkst ob du jetzt nur 60 zeilen oder 3600 zeilen zurückbekommst!

bzw, poste die mal, bzw das ganze Model (die zu implementierenden Methoden halt)
 

gondor

Bekanntes Mitglied
puh... ok. hier einmal der code für das tabellen-modell:

Code:
/*Methode gibt 'ein TabellenModell' zurück, wenn die Query erfolgreich auf die DB ausgeführt wurde*/
  public DefaultTableModel getDataForTable(int range_) {

    ArticCell_ConnectionDB con = null;
    ArticCell_SQL_DB sqldb = null;
    DefaultTableModel data = null;
    ResultSet rSet = null;

    Object[][] odata = null;
    Object[] clmHeaders = null;

    System.out.println("begin: "+System.currentTimeMillis());

    /*Verbindung zur DB herstellen, Statement initialisieren*/
    con = new ArticCell_ConnectionDB();
    sqldb = new ArticCell_SQL_DB();

    /*Table-Model erzeugen*/
    data = new DefaultTableModel();

    /*SQL-Query ausführen und ResultSet zurückholen */
    rSet = sqldb.getResultMySQLQuery(sqldb.setStatementMySQL(con.getConnectionMySQL()), "SELECT * FROM test WHERE db_time <= " + range_ + " ;");

    ResultSetMetaData rsmd = null;
    int clmCnt = -1;

    try {
      rsmd = rSet.getMetaData();
      clmCnt = rsmd.getColumnCount();
    } catch (SQLException e) {
      e.printStackTrace();
    }

    if (rsmd == null || clmCnt == -1) {
      throw new RuntimeException("rsmd is null");
    }
    try {
      rSet.beforeFirst();
      rSet.last();
      int rowCnt = rSet.getRow();
      rSet.beforeFirst();

      odata = new Object[rowCnt][clmCnt];
      clmHeaders = new Object[clmCnt];

      /*Spaltenüberschriften setzen*/
      for (int i = 1; i <= clmCnt; i++) {
        clmHeaders[i - 1] = rsmd.getColumnName(i);
      }

      int row = 0;

      /*Werte setzten*/
      while (rSet.next()) {

        for (int i = 1; i <= clmCnt; i++) {
          odata[row][i - 1] = rSet.getString(i);
        }
        row++;
      }

      /*Werte uns Spaltenüberschriften dem Tabellen-Modell übergeben*/
      data.setDataVector(odata, clmHeaders);

      System.out.println("getDataForTable --> create DefaultTableModel --> Done");

      /*ResultSet und Statement closen*/
      sqldb.closeResultMySQL();
      sqldb.closeStatementMySQL();

      System.out.println("ende: "+System.currentTimeMillis());

    }
    catch (SQLException e1) {
      e1.printStackTrace();
    }

    return data;
  }

... wobei ich mir nicht vorstellen kann, das es wirklich am 'model' liegt, da dieses ja korrekt an die GUI übergeben wird.

ich hoffe, du blickst da durch ;)

gondor(..)
 

gondor

Bekanntes Mitglied
ob das etwas mit:
Code:
    data.fireTableStructureChanged();
    data.fireTableDataChanged();
zu tun hat?

aber ob ich diese setze oder nicht... das problem bleibt :(

please help!

gondor(..)
 

thE_29

Top Contributor
und der select liefert dir nicht zuviele zeilen zurück?

debug mal alles durch, mehr kann ich auch nicht sagen, da es eigentlich sauber befüllt wird!

aber für was ist das??

rSet.beforeFirst();
rSet.last();

?? ist doch bisi sinnlos oder?
 

gondor

Bekanntes Mitglied
@thE_29

select wird schon korrekt ausgeführt...

die table wird immer wieder in ihren 'alten' zustand zurückgeführt (der beim ersten mal ausgeführt wurde)
wenn ich eine tabelle mit 60 werte (vorher 3600 werte) aufrufe wird diese angezeigt. 'minimiere' ich jetzt meine applikation und rufe diese wieder auf... schwupps kommt die tabelle mit den 3600 werten wieder.

so´n mist. hoffe, dass sich hier noch einer 'erbarmt' ;)

danke 'thE_29' für deine hilfestellung.

gondor(..)
 

thE_29

Top Contributor
jo und das heißt du hast noch immer dein altes Table wo gespeichert, weil ein runter rauf => gleiche wie alles neu zeichnen lassen! irgendwo setzt du deine Tabelle net null, mach mal System.gc(); und lass ihn mal aufräumen!
 

gondor

Bekanntes Mitglied
leider kein erfolg. ich denke es könnte evtl. an den 'data.fireTableDataChanged();' liegen...

außerdem glaube ich das mein Tabellen-Modell doch nicht gut implementiert ist (obwohl er
alles richtig macht) aber das mit dem dynamischen anzeigen... mach mich richtig fertig :D

wäre nett, wenn hier noch weitere vorschläge kommen!

gondor(..)
 

gondor

Bekanntes Mitglied
ok, ich habe mal folgendes über 'AbstractTableModel' implementiert. scheitert aber noch an null-pointer-exec.

Code:
public class ArticCell_SQL_MyTableModel extends AbstractTableModel{

  ArticCell_ConnectionDB con = null;
  ArticCell_SQL_DB sqldb = null;
  ResultSet rSet = null;
  ResultSetMetaData rsmd = null;

  private int rowSize = 0;
  private int columnSize = 0;
  private Object[][] data = null;
  private String[] columnNames = null;

  /*Constructor*/
  public ArticCell_SQL_MyTableModel() {

  }

  /*Constructor*/
  public ArticCell_SQL_MyTableModel(int range_) {
    setResult(range_);
  }


  /*Liefert die Anzahl Spalten der Tabellenstruktur*/
  public int getColumnCount() { return columnSize; }

  /*Liefert die Anzahl Spalten der Tabellenstruktur*/
  public int getRowCount() { return rowSize;}

  /*Liefert den Inhalt aus der Tabellenstruktur am Platz (row,col)*/
  public Object getValueAt(int row, int col) { return data[row][col]; }

  /*Liefert Spaltenueberschrift am Platz (col)*/
  public String getColumnName(int col) { return columnNames[col]; }

  /*eschriften der Tabellen am Platz (col)*/
  public void setColumnNameAt(String titel, int col) { columnNames[col] = titel; }

  /*Schreiben eines Objektes in die Tabellenstruktur am Platz (row,col)*/
  public void setValueAt(Object val, int row, int col) { 
    fireTableCellUpdated(row, col); 
    data[row][col]=val; 
  }

  public void setResult(int range_){
    /*Verbindung zur DB herstellen, Statement initialisieren*/
    con = new ArticCell_ConnectionDB();
    sqldb = new ArticCell_SQL_DB();

    /*SQL-Query ausführen und ResultSet zurückholen */
    rSet = sqldb.getResultMySQLQuery(sqldb.setStatementMySQL(con.getConnectionMySQL()), "SELECT * FROM test WHERE db_time <= " + range_ + " ;");

    try {
      rsmd = rSet.getMetaData();
      /*Spaltenzahl ermitteln*/
      columnSize = rsmd.getColumnCount();
      /*Zeilen ermitteln*/
      rowSize = rSet.getRow();
    }
    catch (SQLException e) {
      e.printStackTrace();
    }

    /*Object-Array initialisieren*/
    data = new Object[rowSize][columnSize];

    int row = 0;

    try {

      /*Spaltenüberschriften setzen*/
      for (int i = 1; i <= columnSize; i++) {
        int col = i - 1;
        setColumnNameAt(rsmd.getColumnName(i), col); <-- java.lang.NullPointerException
      }

      /*Werte füllen*/
      while (rSet.next()) {

        for (int i = 1; i <= columnSize; i++) {
          int col = i - 1;
          setValueAt(rSet.getString(i), row, col); <-- java.lang.NullPointerException
        }
        row++;
      }
    } catch (SQLException e1) {
      e1.printStackTrace();
    }
  }
}

aufgerufen wird folgt:

Code:
TableModel model = new ArticCell_SQL_MyTableModel(40);
JTable table = new JTable();
table.setModel(model);
scrollPane = new JScrollPane(table);
jPanel7.add(scrollPane, BorderLayout.CENTER);

die execption sind im code gekennzeichnet. was muss ich ändern?

gondor(..)
 

thE_29

Top Contributor
naja, dein string aus der Funktion getColumnName ist null, deswegen scheiterts!

du musst noch sagen columnNames = new String[columnSize]

und vom 2ten poste mal die ganze excpetion plus die ersten 5 zeilen ;)
 

gondor

Bekanntes Mitglied
kewl....

es funktioniert endlich :D

vielen dank an:

thE_29 & deathbyaclown

für die freundliche unterstützung!

gondor(..)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JTable aktualisieren Java Basics - Anfänger-Themen 2
J Jtable änderung soll graphics aktualisieren Java Basics - Anfänger-Themen 4
U jTable aktualisieren Java Basics - Anfänger-Themen 5
J JTable aktualisieren wenn TableModel sich ändert Java Basics - Anfänger-Themen 6
N Aktualisieren JTable Java Basics - Anfänger-Themen 2
S JTable aktualisieren (nach Datenbank updade) Java Basics - Anfänger-Themen 14
M jTable aktualisieren Java Basics - Anfänger-Themen 5
H JTable richtig aktualisieren Java Basics - Anfänger-Themen 4
B JTable Werte aktualisieren Java Basics - Anfänger-Themen 2
F Aktualisieren einer einzelnen Zelle in JTable Java Basics - Anfänger-Themen 2
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
richis-fragen JTable sowohl Spaltennamen wie auch Spaltenbeschriftungen Java Basics - Anfänger-Themen 7
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
thobren jtable arraylist Java Basics - Anfänger-Themen 12
thobren JTable Icon Java Basics - Anfänger-Themen 1
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
B jTable Spalte summieren Java Basics - Anfänger-Themen 7
N JTable auslesen Java Basics - Anfänger-Themen 6
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
O Kommentar auf JTable Zelle Java Basics - Anfänger-Themen 2
M Jtable Reenderer Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
M Jtable änderung updaten Java Basics - Anfänger-Themen 2
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Klasse in JTable einfügen Java Basics - Anfänger-Themen 7
S JTable Java Basics - Anfänger-Themen 16
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
A zykl. Aktualisierne JTable Java Basics - Anfänger-Themen 9
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
B Kniffel JTable Java Basics - Anfänger-Themen 5
N JTable flackert Java Basics - Anfänger-Themen 8
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
J Eintragen von Personen in JTable Java Basics - Anfänger-Themen 4
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
LexeB4F DEL --> JTable Zelleninhalt Java Basics - Anfänger-Themen 3
R JTable Auslesen Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S JTable clonen Java Basics - Anfänger-Themen 5
H Best Practice PDF JTable Java Basics - Anfänger-Themen 4
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M JTable mit XML datei befüllen Java Basics - Anfänger-Themen 1
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
B JTable - Highlighter ??? Java Basics - Anfänger-Themen 3
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
L JTable Row selected -> fireTableDataChange do nothing. Java Basics - Anfänger-Themen 3
E JTable + TableModel updaten? Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
F JTable adding Row Java Basics - Anfänger-Themen 5
P jTable getColumnClass, mit unterschiedlichen Klassen in einer Column? Java Basics - Anfänger-Themen 5
M Eingabe in JTable bei Eingabe korrigieren Java Basics - Anfänger-Themen 2
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
J JTable Java Basics - Anfänger-Themen 7
T JTable Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
F Methoden JTable + 2 For-Schleifen Java Basics - Anfänger-Themen 4
C jtextfield und jtable Java Basics - Anfänger-Themen 34
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben