JTable constuctor mit array

Status
Nicht offen für weitere Antworten.

b0unc3

Bekanntes Mitglied
sooo ich hab mal wieder ein Problem.. also ich will daten aus einer MySQL Datenbank auslesen und diese speicher ich dann in einem Array ab:

Code:
res = state.executeQuery(sql);
			for (int i=0; res.next() && i<data.length-8; i++) {
				data[i]		= res.getString("datum");
				data[i+1]	= res.getString("uhrzeit");
				data[i+2]	= res.getString("spielname");
				data[i+3]	= res.getString("spielid");
				data[i+4]	= res.getString("punktei");
				data[i+5]	= res.getString("punkteg");
				data[i+6]	= res.getString("einsatz");
				data[i+7]	= res.getString("gewinn");
			}

danach will ich die daten mittels schleife in einer Tabelle ausgeben lassen, aber beim erzeugen der JTable wird kein Array akzeptiert

Beispiel:

Code:
JTable table = new JTable(data[0], title);

dann sagt Eclipse: The constructor JTable(String, String[]) is undefined


. . kann mir damit jemand weiterhelfen?
 
ok danke hab das problem jetzt versucht so zu lösen:
Code:
String[][] data2;
			for (int i=0; i<data.length; i++) {
				data2[][] = {
						{data[i], data[i+1], data[i+2], data[i+3], data[i+4], data[i+7]}
				};
			}

nur leider geht das nicht, da sagt eclipse mir folgendes:

Syntax erroron token "]", VariableDeclaratorId expectet after this token
data2 cannot be resolved of a type

wenn ich es so schreibe dann geht es:

Code:
for (int i=0; i<data.length; i++) {
				String[][] data2 = {
						{data[i], data[i+1], data[i+2], data[i+3], data[i+4], data[i+7]}
				};
			}

nur dann sagt er mir hier: "data2 cannot be resolved"

Code:
JTable table = new JTable(data2, title);
 
b0unc3 hat gesagt.:
..
Code:
JTable table = new JTable(data[0], title);
dann sagt Eclipse: The constructor JTable(String, String[]) is undefined..
Der Konstruktor ist ja auch JTable(String[][], String[]):
Code:
JTable table = new JTable(new String[][]{data}, title);
Oder mit DefaultTableModel:
Code:
DefaultTableModel model = new DefaultTableModel(new String[][]{data}, title);
table = new JTable(model);
Dann kannst du die JTable erweitern:
Code:
model.addRow(data);
Oder eine Zeile entfernen:
Code:
model.removeRow(0);//0=erste Zeile
 
okay danke habs jetzt mit dem DefaultTableModel gemacht..

hab aber ein neues Problem was ich nciht zu lösen weiß..

also ich will in einer for-schleife jedesmal eine neue zeile hinzufügen aber ich bekomme zur laufzeit folgenden fehler:

Exception in thread "main" java.lang.NullPointerException
at Geldspiel.<init>(Geldspiel.java:62)
at Geldspiel.main(Geldspiel.java:80)

hier die for-schleife:

Code:
try {
			res = state.executeQuery(sql);
			for (int i=0; res.next() && i<data.length-8; i++) {
				data[i]		= res.getString("datum");
				data[i+1]	= res.getString("uhrzeit");
				data[i+2]	= res.getString("spielname");
				data[i+3]	= res.getString("spielid");
				data[i+4]	= res.getString("punktei");
				data[i+5]	= res.getString("punkteg");
				data[i+6]	= res.getString("einsatz");
				data[i+7]	= res.getString("gewinn");
				model.addRow(data);
			}
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(null, "Kann Liste nicht laden");
		}

und hier (nach der for-schleife) erstell ich die Tabelle:

Code:
		model = new DefaultTableModel(new String[][]{data}, title);
		table = new JTable(model);

die NullPointerException heißt ja eigentlich das etwas leer ist aber es sind doch daten im array data.. weil wenn ich das model.addRow aus der schleife weglasse, dann gehts und er gibt mir die daten auch aus nur dann aber immer nur den letzten datensatz aus der datenbank, weil er halt keine neue zeile anlegt
 
Code:
model.addRow(data);

//NACHTRAG

mir fällt da grad was ein.. die schleife läuft ja 100 mal.. aber soviel daten sind im moment noch gar nicht in der datenbank... dann ist das der fehler, richtig?? weil ja dann nach 2 durchläufen nichts mehr da ist was er sich holen könnte... hmm..

das führt mich aber auch wieder zu der frage, wie ich überprüfen kann, wieviel zeilen ich in meiner MySQL Datenbnk bereits belegt habe :###

//NACHTRAG2:

ne kann doch nciht sein, weil wenn ich die schleife nur 1 mal durchlaufen lasse dann bekomm ich die selbe fehlermeldung.. :bahnhof:

//NACHTRAG3 *lol*

ok ich habs jetzt mal so gemacht das er sich nur daten holt, wenn auch noch welche vorhanden sind, was auch meinen ersten nachtrag erübrigt.. aber jetzt sind keine daten in der tabelle.. :cry:

Code:
		try {
			res = state.executeQuery(sql);
			for (int i=0; res.next() && i<data.length-8; i++) {
				if (res.next()) { //hier wird geguckt ob noch datensätze da sind bzw. noch zeilen mit daten
					data[i]		= res.getString("datum");
					data[i+1]	= res.getString("uhrzeit");
					data[i+2]	= res.getString("spielname");
					data[i+3]	= res.getString("spielid");
					data[i+4]	= res.getString("punktei");
					data[i+5]	= res.getString("punkteg");
					data[i+6]	= res.getString("einsatz");
					data[i+7]	= res.getString("gewinn");
					model.addRow(data);
				}
			}
 
Wildcard hat gesagt.:
wenn model.addRow eine Exception wirft dann ist model null

ahh ja klar am kopf des Programms siehts so aus:

Code:
...
DefaultTableModel model;
...

dann möchte ich die neue Zeile hinzufügen aber danach model erst erzeugen..naja gut das kann ja wirklich nicht gehen 😛

.. nun aber ein neues problem .. :roll:

wenn ich model jetzt am kopf des programms erzeuge
Code:
DefaultTableModel model = new DefaultTableModel();
wie kann ich dann hinterher model die daten zuweisen?

ich habs jetzt so versucht
Code:
model = (new String[][]{data}, title);
aber dann sagt eclipse:
Syntax error on token ",", . expected
title cannot be resolved or is not a field

aber title hab ich auch im kopf des programms initialisiert:
Code:
	String[] title = {
			"Datum", "Uhrzeit", "Spielname", "Spiel-ID", "Punkte(Ich)", "Punkte(Gegner)", "Einsatz",
			"Gewinn"
	};
 
Wie oben schon gesagt, der Konstruktor von DefaultTableModel ist ja auch
genau wie bei JTable DefaultTableModel(String[][], String[]):
Code:
DefaultTableModel model = new DefaultTableModel(new String[][]{data}, title);
Da du am Anfang noch keine Daten hast, lässt du sie eben weg;
Code:
DefaultTableModel model = new DefaultTableModel(new String[][]{}, title);
Neue Zeilen besorgt addRow, wie ich auch schon sagte.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben