JTable aktualisieren

Status
Nicht offen für weitere Antworten.

hawkeye78

Bekanntes Mitglied
Hallo,

ich weiß mal wieder nicht ob ich besser hier aufgehoben bin, oder doch besser im Forum für Swing und AWT aber da ich denke das es wieder nur irgendeine kleinigkeit ist welche nicht funtkioniert, möchte ich doch lieber mein Problem hier hin posten.

Um nun aber auf mein Problem zu sprechen zu kommen, ich habe das Problem das ich als Hausaufgabe ein kleines Programm zur Verwaltung von Kosten für ein Fahrzeug schreiben muß. Ich habe das Programm nun auch soweit zusammen das ich Datensätze in die hinterlegte Datenbank schreiben kann, und diese auch angezeigt werden. Wenn ich nun allerdings einen neuen Datensatz erfasse wird dieser nicht in der JTable Tabelle angezeigt. Erst wenn ich einmal das Fenster deaktivieren und dann wieder aufrufe (also nicht schliesse), wird auch der neue Datensatz angezeigt. Meine Frage ist nun habe ich vielleicht mit Java irgendeine Chance JTable einmal zu aktualisieren.

Ich hoffe ich konnte einigermaßen verständlich machen woran es momentan bei mir hakt, und ich wäre über einen entsprechenden kleinen Wink sehr dankbar.
Gruß
Dan
 
B

Beni

Gast
So unwahrscheinlich es auch klingt, es geht.
Guck mal in der FAQ nach...

mfg Beni
 
G

Guest

Gast
Erst einmal vielen Dank für deine schnelle Hilfe. Wenn ich jetzt die FAQ richtig verstanden habe muß ich mit fireTableDataChanged() dem TableModell noch einmal mitteilen das sie die Daten in der Tabelle geändert haben. Das habe ich nun auch soweit implementiert aber irgendwie scheint er die Daten immer noch nicht zu aktualiseren. Darüber hinaus bin ich mir momentan auch gar nicht mal so sicher ob das Programm den aktuallen Stand überhaupt aus der Datenbank liest. Da bei der Ausgabe der Sätze die in die Tabelle geschrieben werden soll, der zu letzt eingefügte Satz zwar nicht dabei ist. Aber er ihn nach dem minimieren und wieder anzeigen des Fensters anzeigt.
 
B

Beni

Gast
Heute kriegst du zwar keine Antwort mehr (zumindest nicht von mir), aber es poste doch mal deinen Code. Das könnte nützlich sein.
 

hawkeye78

Bekanntes Mitglied
Kein problem ich werde wohl auch gleich das Thema Java lassen und maximal meinen nächsten Urlaub dort planen (für Kaffee ist es defenetiv schon zu spät ;-) ). Aber mein Quellcode schaut momentan so aus.

Ich rufe aus meiner Klasse für die Oberfläche zum einen die Methode neu aus der Klasse Datenbank auf. Diese hat folgenden Aufbau:

Code:
	public void neu(Oberflaeche o2)
	{
		// Ermittlung der Daten aus den Textfeldern
		String sdatum="'"+o2.TFDatum.getText()+"'";
		String sliter=o2.TFliter.getText();
		String skm=o2.TFkm.getText();
		String sbetrag=o2.TFeuro.getText();
		
		boolean bolvollgetankt=o2.bolvollgetankt;
		
		// Ermittlung der Indizes aus den Dropdownlisten
		int iindex_fahrzeug=o2.DDFahrzeug.getSelectedIndex();
		int iindex_beleg=o2.DDBeleg.getSelectedIndex();
		
		// Ermittlung der ID's zu die Indizes
		String sfahrzeug_id=o2.vFahrzeug.elementAt(iindex_fahrzeug).toString();
		String sbeleg_id=vBeleg.elementAt(iindex_beleg).toString();
	
		// Konvertierung aller Daten in die Datenbankspezifischen Datentypen
		float fliter=Float.parseFloat(sliter);
		float fkm=Float.parseFloat(skm);
		float fbetrag=Float.parseFloat(sbetrag);
		float fverbrauch=fliter/fkm;
		Integer iid_fahrzeug=Integer.valueOf(sfahrzeug_id);
		Integer iid_beleg=Integer.valueOf(sbeleg_id);
		
		String abfrage_einfuegen="INSERT INTO Verbrauch ( ID_Fahrzeug, ID_Beleg, Datum, Strecke, Kraftstoffmenge, Preis, vollgetankt, Verbrauch) VALUES ("+iid_fahrzeug+" ,"+iid_beleg+" ,"+sdatum+" ,"+fkm+" ,"+fliter+" ,"+fbetrag+" ,"+bolvollgetankt+" ,"+fverbrauch+")";
		
		try
		{
			statement1.executeUpdate(abfrage_einfuegen);
		}
		catch(SQLException exec){}
	}

Danach rufe ich in der Klasse Tabelle die Methode Tabellenfuellen auf, auf um die Felder zu aktualisieren. Da ich aber den Fehler irgendwo in diesem Teil des Programmes vermute poste ich hier einmal die gesamte Klasse:

Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.*;

public class Tabelle
extends DefaultTableCellRenderer
{
	JTable TabVerbrauch;
	Statement statement1;                     // Objekt für den Handle auf die Datenbank
	Connection connection;                    // Objekt für die Verbindung zur Datenbank
	DefaultTableModel aModel;
	int iAnzahlDatensaetze=0;
	
	// Methode (Konstruktur) zum Anlegen der Tabelle
	Tabelle(Oberflaeche o1)
	throws java.sql.SQLException
	{
		TabVerbrauch=o1.getTable();
		
		aModel=(DefaultTableModel)TabVerbrauch.getModel();

		// Definition der Spaltenüberschriften
		aModel.addColumn("Datum");
		aModel.addColumn("Strecke");
		aModel.addColumn("Kraftstoffmenge");
		aModel.addColumn("Preis");
		aModel.addColumn("Verbrauch");
		aModel.addColumn("vollgetankt");
		aModel.addColumn("Belegart");
				
		// Laden des ODBC/JDBC Treibers
		try
		{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");		
		}
		catch(ClassNotFoundException excep)
		{
			o1.LMeldung.setText(excep.toString());
		}
		
		// Aufbau der Verbindung zur Datenbank
		try
		{
			connection=DriverManager.getConnection("jdbc:odbc:Benzin","Admin","");
			statement1=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
		}
		catch(SQLException excep)
		{
			o1.LMeldung.setText(excep.toString());
		}
		
		TabVerbrauch.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		
	}
	
	// Methode zum Füllen der Tabelle
	public void Tabellefuellen(Oberflaeche o1, int iIDFahrzeug)
	{
		ResultSet result;
		String sabfrage_verbrauch="SELECT Verbrauch.Datum, Verbrauch.Strecke, Verbrauch.Kraftstoffmenge, Verbrauch.Preis, Verbrauch.Verbrauch, Verbrauch.vollgetankt, Belege.Name FROM Verbrauch, Belege WHERE Belege.ID_Beleg=Verbrauch.ID_Beleg AND  ID_Fahrzeug="+iIDFahrzeug;
		Object[] Datensatz=new Object[7];    // Objekt für einen Datensatz;

		// Löschen der vorhandenen Zeilen aus der Tabelle
		for(int i=0; i<iAnzahlDatensaetze; i++)
		{
			aModel.removeRow(0);
			System.out.println("bla");
		}
		iAnzahlDatensaetze=0;
		// Auslesen der Fahrzeuge aus der Tabelle Fahrzeuge
		try
		{
			result=statement1.executeQuery(sabfrage_verbrauch);
		
			// Auslesen des Ergebnissesfeldes aus der Datenbank
			while(result.next())
			{
				Datensatz[0]=result.getString("Datum");
				double dStrecke=result.getDouble("Strecke");
				Datensatz[1]=String.valueOf(dStrecke);
				double dKraftstoffmenge=result.getDouble("Kraftstoffmenge");
				Datensatz[2]=String.valueOf(dKraftstoffmenge);
				double dPreis=result.getDouble("Preis");
				Datensatz[3]=String.valueOf(dPreis);
				double dVerbrauch=result.getDouble("Verbrauch");
				Datensatz[4]=String.valueOf(dVerbrauch);				
				boolean bvollgetankt=result.getBoolean("vollgetankt");

				if(bvollgetankt==true)
				{
					Datensatz[5]="ja";
				}
				else
				{
					Datensatz[5]="nein";					
				}
				Datensatz[6]=result.getString("Name");
				
				System.out.println("Strecke"+dStrecke);
				
				// Hinzufügen der Zeile in die Tabelle
				aModel.addRow(Datensatz);
				iAnzahlDatensaetze=iAnzahlDatensaetze+1;
			}	
			TabVerbrauch.setModel(aModel);

		}
		catch(SQLException ex){} 	
	}
	
	// Methode zum schließen der Verbindung zur Datenbank
	public void schliessen()
	{
		try
		{
			statement1.close();
			connection.close();
		}
		catch(SQLException e)
		{}
	}
}

Ich bin auf jeden fall ziemlich ratlos warum das nicht funktioniert und wäre dir sehr dankbar, wenn du irgendwann in den kommenden Tagen einmal einen Blick auf den Quellcode werfen könntest
 
B

Beni

Gast
Ich hab den Teil ohne Datenbank mal ausprobiert, und das ging. Das DefaultTableModel funktioniert auch normalerweise richtig, da liegt der Fehler eher an einer anderen Stelle.

Kann es sein, dass vielleicht mal eine Exception geworfen wird? Das würde erklären, dass einige Codezeilen übersprungen werden. (Lass dir eine Benachrichtung ausgeben, sollte eine Exception geworfen werden. Ist nocht ganz praktisch um Fehler zu suchen.)

???:L Beni
 

hawkeye78

Bekanntes Mitglied
Guten Morgen :)

erst einmal noch einmal vielen Dank das du dich mit meinem Problem so ausgiebig beschäftigst. Allerdings kann es ja sein das ich ein bißchen Blind bin, aber irgendwie scheint es diese Funktion in Eclipse nicht zu geben. Allerdings habe ich momentan die Theorie das ich vielleicht das Problem das ich die Tabelle in der Klasse Oberfläche definiere, und diese dann an die Klasse Tabelle übergebe um sie dort zu füllen diese Übergabe hat momentan bei mir folgenden Aufbau:

Code:
public class Oberflaeche
extends JFrame
implements WindowListener
{
	// Definition der Tabelle
	JTable TABverbrauch = new JTable();

// Definition der übrigen Fensterelemente

	public Oberflaeche()
	{	
		// Aufbau der Verbindung zur Datenbank, Positionierung der Elemente auf dem Fenster etc.


		// Funktionsbelegung für den Erfassen-Button
		BerfassenEintrag.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				db1.neu(Oberflaeche.this);

				// Aufruf der Methode zum Füllen der Tabelle
				tab1.Tabellefuellen(Oberflaeche.this, iIDFahrzeug);
				
			}
		});
		
	}
	
	public JTable getTable()
	{ 
	    return TABverbrauch; 
	} 
// [...]
}

Meine Vermutung ist nun das ich zwar die Daten in die Tabelle nun füllen kann die Klasse für die Darstellung der Daten also die Klasse Oberfläche diese Änderungen nicht mitbekommt. Wie gesagt das ich nur eine Theorie, und vielleicht liege ich damit auch lichtjahre vom eigentlichen Problem entfernt. Aber ich bin momentan ziemlich ratlos was ich noch machen könnte.
Noch einmal vielen Dank für deine Hilfe.
Gruß
Dan
 
B

Beni

Gast
Ich bin ehrlich gesagt ein bisschen ratlos.

Den Überblick über dein Progi hast wohl nur du selbst... :wink:
aber manchmal nützt es noch, repaint oder revalidate aufzurufen.

Code:
Oberflaeche x = ...
x.revalidate();
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
B JTable aktualisieren AWT, Swing, JavaFX & SWT 22
Kenan89 JTable aktualisieren AWT, Swing, JavaFX & SWT 21
C jTable aktualisieren AWT, Swing, JavaFX & SWT 2
S JTable - Aktualisieren / Neu zeichnen. AWT, Swing, JavaFX & SWT 5
C Daten aus DB -> JTable aktualisieren klappt nicht AWT, Swing, JavaFX & SWT 16
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
K Swing JTable Model aktualisieren AWT, Swing, JavaFX & SWT 2
K JTable aktualisieren AWT, Swing, JavaFX & SWT 9
L Swing Daten in JTable aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing JTable nach einer Änderung einer Zelle komplett aktualisieren. AWT, Swing, JavaFX & SWT 10
S JTable aktualisieren AWT, Swing, JavaFX & SWT 4
U JTable in einem Tab aktualisieren aus anderem Tab heraus initiiert AWT, Swing, JavaFX & SWT 4
A JComboBox bei Veränderungen in der JTable mit aktualisieren AWT, Swing, JavaFX & SWT 6
G Swing JTable will sich einfach nicht aktualisieren AWT, Swing, JavaFX & SWT 4
N JTable aktualisieren AWT, Swing, JavaFX & SWT 2
calzone Swing JTable, Werte aktualisieren klappt nicht! AWT, Swing, JavaFX & SWT 7
G JTable bei Insert in DB via jdbc aktualisieren AWT, Swing, JavaFX & SWT 9
M Wie, ein JTable / JPanel / JContentPane aktualisieren? AWT, Swing, JavaFX & SWT 3
G JTable aktualisieren fireTableDataChanged()? AWT, Swing, JavaFX & SWT 1
J GUI (JTable) während Rekursion aktualisieren AWT, Swing, JavaFX & SWT 4
S jTable beim Klick auf Button aktualisieren AWT, Swing, JavaFX & SWT 7
F JTable Daten aktualisieren AWT, Swing, JavaFX & SWT 2
N JTable aktualisieren AWT, Swing, JavaFX & SWT 8
M JTable aktualisieren AWT, Swing, JavaFX & SWT 17
C JTable aktualisieren AWT, Swing, JavaFX & SWT 5
H JTable aktualisieren / InternalFrames auf Panel beschränken AWT, Swing, JavaFX & SWT 6
I JTable aktualisieren AWT, Swing, JavaFX & SWT 4
J JTable aktualisieren AWT, Swing, JavaFX & SWT 5
I Swing JTable zeichnet kein vertical Grid AWT, Swing, JavaFX & SWT 6
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
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 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
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
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben