DefaultTableModel aktualisieren

Status
Nicht offen für weitere Antworten.

Dutch_OnE

Mitglied
Hallo,

ich habe folgende Frage. Ich muss eine Angebotsverwaltung schreiben und benutze dabei eine Methode, die sich die benötigten Daten aus einer ArrayList holt.

Diese Methode liefert mir nun die Daten für die Table. Nach Anlegen des ersten Datensatz wird über einen Listener der Frame mit der Tabelle aufgezogen und die Daten angezeigt.

Wenn ich nun einen 2ten Datensatz hinzufüge, ist die Tabelle ja schon fertig und wird nicht neu erstellt. Wie bekomme ich diese aktualisiert, bzw. wie kann ich ihr sagen, dass ein neuer DAtensatz hinzugekommen ist ?

gruß dutch
 
G

Guest

Gast
Es gibt im TableModel ne Funktion die lautet fireTableDataChanged.
Damit sagst du der tabelle das sich die Daten geändert haben und das sie sich neu darstellen soll...
 

Dutch_OnE

Mitglied
Habe ich gerade versucht, aber da komme ich nicht so richtig weiter.

Wie gesagt ich schreibe aus einer Klasse bestimmte Daten in eine ArrayList und erzeuge danach automatisch eine Tabelle in einem neuen Frame.

Beim ersten Datensatz wird die AL gefüllt, die Tabelle holt sich die Daten und zeigt sie an. Beim nächsten Datensatz ist die Tabelle ja schon erstellt. Ich weiß halt nicht wie ich ihm mitteilen kann, das er einen weiteren Datensatz hat, den er anzeigen soll.
[/code]
 

Dutch_OnE

Mitglied
ich glaube mir fehlt da einfach noch der Zusammenhang.

Das ist der Frame indem ich die Artikel eingebe:

1.PNG


Wenn ich nun hinzufügen drücke, wird dieser Artikel in eine ArrayList geschrieben. Dann wird ein Vector (mit Daten aus Arraylist und Datenbank) für die folgende Tabelle erstellt, die gleichzeitig in einen neuem Frame geöffnet wird. Die Tabelle wird mit Konstruktor erstellt, aber ich weiß halt nicht was ich tun muss, um der Tabelle mitzuteilen, wenn es einen 2 Datensatz gibt.

2.PNG



Das ist der Quellcode der Tabelle:
Code:
public class TabNeuesAngebot extends JFrame {

	private static final long serialVersionUID = -7683083478209677885L;
	static JPanel windows;
	
	public TabNeuesAngebot() throws Exception { 
	
		super("ausgewählte Artikel");
		
		final DefaultTableModel model;

		model = new DefaultTableModel(UtilAngebot.getAlleAngbtPosTmpTab(), UtilAngebot.showAngebotsPosSpalten());

		// Das JTable initialisieren
		final JTable table = new JTable(model);
		windows = new JPanel(new FlowLayout());
		
		Container cp = getContentPane();
		
		windows.add(new JScrollPane(table), BorderLayout.CENTER);

		cp.add(windows);
		setSize(800, 350);
		setVisible(true);
	}
}

Und das der vom Vector, den die Tabelle im Konstruktor stehen hat. (Die Beschriftung der Tabellenüberschrift lasse ich mal außen vor.
Code:
	public static Vector getAlleAngbtPosTmpTab() throws Exception {
		
		Vector hilfe1 = new Vector();
		Vector hilfe2 = new Vector();
		
		for (Enumeration<AngebotsPosition> el = hilfe.elements(); el.hasMoreElements();) {
			
			AngebotsPosition angbtPos = el.nextElement();
			int angbtNr = Integer.parseInt(angbtPos.getAngebotsNr());
			int artkNr = Integer.parseInt(angbtPos.getArtikelNr());
			float menge = angbtPos.getMenge();
			int pos = 1;
			float preis = 0f;
			float gesamt = 0f;
			hilfe2.add(pos);
			hilfe2.add(artkNr);
			OracleDB db = OracleDB.getInstance();
			System.out.println(artkNr);
			ResultSet rs1 = db.doQuery("select * from Artikel where ArtikelNr = " +  artkNr);
			while (rs1.next()){
				hilfe2.add(rs1.getString("Bezeichnung"));
				hilfe2.add(rs1.getString("Einheit"));
				preis = (rs1.getFloat("Preis"));
			}
			hilfe2.add(menge);
			preis = Math.round((float) (preis * 100)) / 100f;
			gesamt = menge * preis;
			hilfe2.add(preis);
			hilfe2.add(gesamt);
			pos ++;
			rs1.close(); 
		}
		hilfe1.add(hilfe2);
		return hilfe1;
	}
 
S

SlaterB

Gast
> model = new DefaultTableModel(UtilAngebot.getAlleAngbtPosTmpTab(), UtilAngebot.showAngebotsPosSpalten());

an der Stelle erstelle bitte kein Model sondern gib den Inhalt der Vectoren aus,
wenn du da zwei Zeilen/ Einträge drin siehst, dann kann man weiterreden,
denke aber dass nur eine drin ist

edit:
es kann ja gar nur ein Element drin sein, nur hilfe2, alles was du aus der DB liest steht in hilfe2,
so funktioniert eine JTable aber nicht,
für jede Zeile brauchst du einen neuen Vector im Hauptvector hilfe1 (tolle Namen..)
 

Dutch_OnE

Mitglied
So, ich habe mir das nochmal genauer angeschaut. Also ich gebe ja hilfe1 zurück. Für jeden Datensatz erstellt ich ein hilfe2, welches dann zu hilfe1 geadded wird. Daher sollte dieser Vector doch so richtig sein.

Meiner Meinung nach soll die Methode wie folgt funktionieren:

Zunächst erstelle ich 2 Vectoren um einen mehrdimensionalen Vector zu erhalten

Code:
Vector hilfe1 = new Vector();
Vector hilfe2 = new Vector();

Dann gehe ich meine ArrayList (hilfe) und hole mir jedes Element
Code:
for (Enumeration<AngebotsPosition> el = hilfe.elements(); el.hasMoreElements();) {
			
	AngebotsPosition angbtPos = el.nextElement();
	int angbtNr = Integer.parseInt(angbtPos.getAngebotsNr());
	int artkNr = Integer.parseInt(angbtPos.getArtikelNr());
	float menge = angbtPos.getMenge();

Dann hole ich mir zusätzliche Informationen aus der DB und lege die in den Vector hilfe2 rein.
Die Preis Elemente werden dabei gerundet und die Position automatisch hochgezählt. Somit besteht mein kompletter Vector hilfe2 aus "Position, ArtikelNr, Bezeichnung, Einheit, Preis, Gesamtpreis".

Code:
                int pos = 1;
	float preis = 0f;
	float gesamt = 0f;
	hilfe2.add(pos);
	hilfe2.add(artkNr);
	OracleDB db = OracleDB.getInstance();
	ResultSet rs1 = db.doQuery("select * from Artikel where ArtikelNr = " +  artkNr);
	while (rs1.next()){
		hilfe2.add(rs1.getString("Bezeichnung"));
		hilfe2.add(rs1.getString("Einheit"));
		preis = (rs1.getFloat("Preis"));
	}
                hilfe2.add(menge);
	preis = Math.round((float) (preis * 100)) / 100f;
	gesamt = menge * preis;
	hilfe2.add(preis);
	hilfe2.add(gesamt);
	pos ++;
	rs1.close(); 
}

Zum Abschluss lege ich hilfe2 in den Vector hilfe1 und sollte somit einen mehrdimensionalen Vector habe, den die Funktion zurückgibt.
Code:
                hilfe1.add(hilfe2);
	return hilfe1;
	}

Nun dachte ich eigentlich das er für das DefaultTableModel eine Methode gibt, die anhand der Daten im Konstruktor, diese nochmal aktualisieren kann.
Vielleicht fehlt mir auch einfach noch das Verständnis, worin der Vorteil eines DefaultTableModel und einer normalen JTable liegt.
 

Dutch_OnE

Mitglied
Jetzt habe ich nochmal etwas weiter getestet.
Der Vector funktioniert richtig. Das Problem ist der Aufruf. Da ich die Methode, die mir den Vector hilfe1 für die Tabelle gibt, nur im Konstruktor meiner DefaultTableModels aufrufe, wird der Vector nur einmal abgerufen und hat daher nur einen Datensatz.

Nun rufe ich diese Methode in einem Listener jedesmal wenn ich einen neuen Artikel hinzufüge per Hand auf und der Vector füllt sich wie er soll.

Nur wie bekomme ich nun meinen aktuelle Vector an das DefaultTableModel übergeben ?
 

Dutch_OnE

Mitglied
Im Moment habe ich folgenden Zustand erreicht:

Code:
public class TabNeuesAngebot extends JFrame {

	private static final long serialVersionUID = -7683083478209677885L;
	static JPanel windows;
	
	public TabNeuesAngebot() throws Exception { 
	
		super("ausgewählte Artikel");
		
		DefaultTableModel model = null;
		System.out.println(model);
		
		model = new DefaultTableModel(UtilAngebot.getAlleAngbtPosTmpTab(), UtilAngebot.showAngebotsPosSpalten());
		System.out.println(UtilAngebot.getAlleAngbtPosTmpTab());
		System.out.println(model);
		
		// Das JTable initialisieren
		JTable table = null;
		table = new JTable(model);
		
		windows = new JPanel(new FlowLayout());
		
		Container cp = getContentPane();
		
		windows.add(new JScrollPane(table), BorderLayout.CENTER);

		cp.add(windows);
		setSize(800, 350);
		setVisible(true);

	}
}

und das ist mein Ereignis:

null
[[1, 300002, Cola, Liter, 1.0, 0.79, 0.79]]
javax.swing.table.DefaultTableModel@1ebd75b
null
[[1, 300002, Cola, Liter, 1.0, 0.79, 0.79, 2, 300003, Wein, Liter, 2.0, 5.49, 10.98]]
javax.swing.table.DefaultTableModel@7808b9
Programm beendet

Die Tabelle und das Model wird gelöscht, dann kommt der Vector. Auch wenn im Vector beide Datensätze angezeigt werden, sehe ich in meiner Tabelle nur den ersten stehen.

Ich frage mich, warum er nicht den 2ten Satz anzeigt !!!!
 
S

SlaterB

Gast
weil du immer noch nur einen einzigen Vector mit 14 statt 7 Elementen drin hast,
stattdessen brauchst du zwei Untervectoren mit je 7 Einträgen

aus
[[1, 300002, Cola, Liter, 1.0, 0.79, 0.79, 2, 300003, Wein, Liter, 2.0, 5.49, 10.98]]
muss
[[1, 300002, Cola, Liter, 1.0, 0.79, 0.79], [2, 300003, Wein, Liter, 2.0, 5.49, 10.98]]
werden
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
N Hashmap in DefaultTableModel AWT, Swing, JavaFX & SWT 1
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
Z DefaultTableModel + checkbox AWT, Swing, JavaFX & SWT 0
F AddRow funktionier nicht (DefaultTableModel) AWT, Swing, JavaFX & SWT 3
M Swing DefaultTableModel Problem AWT, Swing, JavaFX & SWT 5
H JTable - DefaultTableModel vs AbstractTableModel AWT, Swing, JavaFX & SWT 5
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
D Swing DefaultTableModel setValueAt Methode AWT, Swing, JavaFX & SWT 7
M DefaultTableModel ruft paintComponent auf ! AWT, Swing, JavaFX & SWT 4
J Objekte aus Defaulttablemodel AWT, Swing, JavaFX & SWT 5
J JTable DefaultTableModel - Änderungen feststellen AWT, Swing, JavaFX & SWT 8
B Swing DefaultTableModel, Checkbox in Spalte AWT, Swing, JavaFX & SWT 4
M DefaultTableModel setDataVector AWT, Swing, JavaFX & SWT 6
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
J Swing JTable - Konflikt DefaultTableModel+DefaultTableColumnModel AWT, Swing, JavaFX & SWT 7
calzone Swing JTable/DefaultTableModel, rowData auslesen ? AWT, Swing, JavaFX & SWT 15
T Von JTable auf DefaultTableModel AWT, Swing, JavaFX & SWT 2
A insertRow: is ambiguous for the type DefaultTableModel ? AWT, Swing, JavaFX & SWT 2
T JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 4
D Nochmal ne Frage zum DefaultTableModel AWT, Swing, JavaFX & SWT 8
G Funktionsfrage zu DefaultTableModel AWT, Swing, JavaFX & SWT 2
J JTablemi DefaultTableModel:Spaltennamen werd.nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Daten von DefaultTableModel sortieren AWT, Swing, JavaFX & SWT 3
J JTableModel: DefaultTableModel vs. AbrstractTableModel AWT, Swing, JavaFX & SWT 4
K JComboBox in DefaultTableModel darstellen AWT, Swing, JavaFX & SWT 2
K DefaultTableModel makierte Row ermitteln AWT, Swing, JavaFX & SWT 6
B fire methoden auch bei defaultTableModel? AWT, Swing, JavaFX & SWT 5
A defaultTableModel "Problem" AWT, Swing, JavaFX & SWT 6
M Wann AbstractTableModel und wann DefaultTableModel AWT, Swing, JavaFX & SWT 4
M DefaultTableModel, kann keine Rows hinzufügen AWT, Swing, JavaFX & SWT 3
M Problem mit JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 2
L JTable (DefaultTableModel) nach Spalte sortieren-TableSorter AWT, Swing, JavaFX & SWT 2
A JTable Änderungen anzeigen (DefaultTableModel) AWT, Swing, JavaFX & SWT 5
G JTable/DefaultTableModel zur Seite scollen AWT, Swing, JavaFX & SWT 3
J DefaultTableModel einlesen aus *txt AWT, Swing, JavaFX & SWT 2
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
G JavaFX BarChart während der Runtime aktualisieren AWT, Swing, JavaFX & SWT 4
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M Muss man die ObservableList aktualisieren? AWT, Swing, JavaFX & SWT 3
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
M JavaFX Automatisches Aktualisieren der Seite AWT, Swing, JavaFX & SWT 26
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
C JavaFX TreeTableView aktualisieren AWT, Swing, JavaFX & SWT 10
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
2 Zeit Differenz automatisch aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Stage aktualisieren AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
T Int-Wert aktualisieren? AWT, Swing, JavaFX & SWT 9
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
S Combobox aktualisieren AWT, Swing, JavaFX & SWT 3
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
J GUI/Random aktualisieren? AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
P Swing Aktualisieren von JFrame in einem onClick-Ereignis AWT, Swing, JavaFX & SWT 11
B JTable aktualisieren AWT, Swing, JavaFX & SWT 22
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
G JRadioButton aktualisieren nicht... AWT, Swing, JavaFX & SWT 10
C ToolTip aktualisieren AWT, Swing, JavaFX & SWT 2
D Swing JComboBox aktualisieren AWT, Swing, JavaFX & SWT 4
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
A Swing Aktualisieren eines JPanels AWT, Swing, JavaFX & SWT 13
A JButton in einem Array aktualisieren AWT, Swing, JavaFX & SWT 8
Kenan89 JTable aktualisieren AWT, Swing, JavaFX & SWT 21
B Swing Fensterinhalt aktualisieren AWT, Swing, JavaFX & SWT 11
S Spezielle komponente aktualisieren AWT, Swing, JavaFX & SWT 9
V Swing JProgressBar aktualisieren AWT, Swing, JavaFX & SWT 14
C Combobox bei Tabellenänderung mit aktualisieren AWT, Swing, JavaFX & SWT 11
C jTable aktualisieren AWT, Swing, JavaFX & SWT 2
M TabbpedPane Anzeige aktualisieren AWT, Swing, JavaFX & SWT 6
X Swing JTree aktualisieren AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben