Hallo liebe Forummember,
wieder einmal brauche ich eure geschätzte Hilfe. Nach langem Googeln, Nutzen der SuFu hier im Forum und Stöbern in der Java API komme ich leider nicht weiter bei meinem Problem.
Am besten schildere ich kurz das Programm um das es geht. Als Hausaufgabe sollen wir den Prototyp eines Programms erweitern, bei dem es um die Verwaltung von Tischkickerspielen geht. Das Programm hat mehrere Tabs, konkret brauche ich Hilfe bei dem ersten Tab. Das GUI steht soweit, da es im Groben schon vorgegeben war. In diesem ersten Tab geht es darum Spieler anlegen, ändern und löschen zu können. Das ganze wird dann in eine DB4O Datenbank gespeichert und bei Programmstart wieder aufgerufen um so die Spielertabelle zu füllen. Wir nutzen dabei das MVC-Prinzip und nutzen dabei (grob) folgende Klassen:
1. Model
Das Model enthält eine ArrayList in der die Instanzen der selbst erstellten Klasse Spieler gespeichert werden. Diese ArrayList dient als Datenquelle für den JTable, welcher die Spieler dann anzeigt. Darüber hinaus besitzt das Model noch einen temporär gesetzten Spieler, welcher gerade bearbeitet bzw. neu hinzugefügt wird.
2. View
Die View besteht im Wesentlichen aus 4 Eingabetextfeldern für die Spielerdaten (Vorname, Nachname, Angabe seit wann der Spieler kickert, Geburtsdatum), 2 Buttons und einer JTable in der die vorhandenen Spieler dargestellt werden. Die View bezieht ihre Daten aus dem Model.
3. Controller
Der Controller als Bindeglied zwischen View und Model implementiert die Action- und MouseListener. Die Actions werden durch die beiden Buttons ausgelöst und der MouseListener soll auf Klicks auf die JTable reagieren.
So das war das Programm, mal in aller Kürze zusammengefasst. Jetzt kommt mein eigentliches Problem ...
Ich möchte, dass die Textfelder für die Spielereingaben sich mit den Daten des in der JTable selektierten Spielers füllen. Im nächsten Schritt soll der Benutzer die Daten dann ändern können. Die Frage ist jetzt: Wie beschaffe ich mir den aktuell selektierten Spieler? Zuerst bin ich das Problem so angegangen, dass ich den Spieler mit dem Index der selektierten Zeilennummer aus der JTable aus der ArrayList geladen habe. Das war auch kein Problem, da die Spieler in der ArrayList in genau der Reihenfolge wie in der JTable sortiert sind. Nun weiß ich aber, dass wir die Aufgabe möglichst so lösen sollten, dass wir nicht über den Index gehen, sondern zeigerorientiert arbeiten sollen.
Ich hab mir dazu Folgendes gedacht: Ich lege mir in meinem Controller eine neue Spieler-Instanz an, nennen wir sie selectedPlayer und hole mir seine Daten aus dem Model über die dort wegen des Interfaces implementierte Methode getValueAt(). Diese Methode rufe ich über eine neue Methode aus der View heraus auf. Allerdings liefert mir die getValueAt()-Methode nur Object-Instanzen zurück. Genau da liegt mein Problem. Dazu hab ich folgende Zeilen Code geschrieben:
Die Daten Vorname und Name (beides Strings) sowie die Angabe seit wann der Spieler spielt (ein Integer-Wert) bekomme ich einwandfrei über typecast bzw. über die statische Methode Integer.decode(String) hin. Das Problem ist das Geburtsdatum, welches ein Date ist. Mein Ansatz war, dass ich mir den rückgegebenen Object-Wert speichere, ihn dann in einen String überführe und ihn dann in ein Date parse. Nur schon bei der Überführung in einen String knallts bei mir mit einer Exception. Ich hab mir dann im Debugger den Inhalt des Objects angeschaut und festgestellt, dass die korrekten Daten in der Instanz vorhanden sind, allerdings geht die Überführung von Object in Date schief :rtfm:
Ich danke für jegliche Hilfe im vorraus!
lieben Gruß
Marcus
Edit: Ups ich hab Mist erzählt sehe ich gerade beim compilieren. Schon bei der Zeile in der ich einen Int-Wert haben möchte knallts bei mir. Also falls mir jemand dort schon Hilfe geben könnte, wäre ich sehr dankbar
wieder einmal brauche ich eure geschätzte Hilfe. Nach langem Googeln, Nutzen der SuFu hier im Forum und Stöbern in der Java API komme ich leider nicht weiter bei meinem Problem.
Am besten schildere ich kurz das Programm um das es geht. Als Hausaufgabe sollen wir den Prototyp eines Programms erweitern, bei dem es um die Verwaltung von Tischkickerspielen geht. Das Programm hat mehrere Tabs, konkret brauche ich Hilfe bei dem ersten Tab. Das GUI steht soweit, da es im Groben schon vorgegeben war. In diesem ersten Tab geht es darum Spieler anlegen, ändern und löschen zu können. Das ganze wird dann in eine DB4O Datenbank gespeichert und bei Programmstart wieder aufgerufen um so die Spielertabelle zu füllen. Wir nutzen dabei das MVC-Prinzip und nutzen dabei (grob) folgende Klassen:
1. Model
Das Model enthält eine ArrayList in der die Instanzen der selbst erstellten Klasse Spieler gespeichert werden. Diese ArrayList dient als Datenquelle für den JTable, welcher die Spieler dann anzeigt. Darüber hinaus besitzt das Model noch einen temporär gesetzten Spieler, welcher gerade bearbeitet bzw. neu hinzugefügt wird.
2. View
Die View besteht im Wesentlichen aus 4 Eingabetextfeldern für die Spielerdaten (Vorname, Nachname, Angabe seit wann der Spieler kickert, Geburtsdatum), 2 Buttons und einer JTable in der die vorhandenen Spieler dargestellt werden. Die View bezieht ihre Daten aus dem Model.
3. Controller
Der Controller als Bindeglied zwischen View und Model implementiert die Action- und MouseListener. Die Actions werden durch die beiden Buttons ausgelöst und der MouseListener soll auf Klicks auf die JTable reagieren.
So das war das Programm, mal in aller Kürze zusammengefasst. Jetzt kommt mein eigentliches Problem ...
Ich möchte, dass die Textfelder für die Spielereingaben sich mit den Daten des in der JTable selektierten Spielers füllen. Im nächsten Schritt soll der Benutzer die Daten dann ändern können. Die Frage ist jetzt: Wie beschaffe ich mir den aktuell selektierten Spieler? Zuerst bin ich das Problem so angegangen, dass ich den Spieler mit dem Index der selektierten Zeilennummer aus der JTable aus der ArrayList geladen habe. Das war auch kein Problem, da die Spieler in der ArrayList in genau der Reihenfolge wie in der JTable sortiert sind. Nun weiß ich aber, dass wir die Aufgabe möglichst so lösen sollten, dass wir nicht über den Index gehen, sondern zeigerorientiert arbeiten sollen.
Ich hab mir dazu Folgendes gedacht: Ich lege mir in meinem Controller eine neue Spieler-Instanz an, nennen wir sie selectedPlayer und hole mir seine Daten aus dem Model über die dort wegen des Interfaces implementierte Methode getValueAt(). Diese Methode rufe ich über eine neue Methode aus der View heraus auf. Allerdings liefert mir die getValueAt()-Methode nur Object-Instanzen zurück. Genau da liegt mein Problem. Dazu hab ich folgende Zeilen Code geschrieben:
Java:
// temporären Spieler anlegen
Player tmp = new Player();
// Spielerdaten aus dem selektierten Spieler holen
tmp.setFirstName((String)playerTable.getValueAt(playerTable.getSelectedRow(), 0));
tmp.setFamilyName((String)playerTable.getValueAt(playerTable.getSelectedRow(), 1));
tmp.setPlaysSince(Integer.decode((String)playerTable.getValueAt(playerTable.getSelectedRow(), 2)));
Object dateOfBirthObject = playerTable.getValueAt(playerTable.getSelectedRow(), 3);
String dateOfBirthString = (String)dateOfBirthObject;
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.GERMANY);
try
{
Date dateOfBirth = df.parse(dateOfBirthString);
tmp.setDateOfBirth(dateOfBirth);
} catch (ParseException e)
{
// nicht implementiert da korrektes Parsing immer möglich ist
}
return tmp;
Die Daten Vorname und Name (beides Strings) sowie die Angabe seit wann der Spieler spielt (ein Integer-Wert) bekomme ich einwandfrei über typecast bzw. über die statische Methode Integer.decode(String) hin. Das Problem ist das Geburtsdatum, welches ein Date ist. Mein Ansatz war, dass ich mir den rückgegebenen Object-Wert speichere, ihn dann in einen String überführe und ihn dann in ein Date parse. Nur schon bei der Überführung in einen String knallts bei mir mit einer Exception. Ich hab mir dann im Debugger den Inhalt des Objects angeschaut und festgestellt, dass die korrekten Daten in der Instanz vorhanden sind, allerdings geht die Überführung von Object in Date schief :rtfm:
Ich danke für jegliche Hilfe im vorraus!
lieben Gruß
Marcus
Edit: Ups ich hab Mist erzählt sehe ich gerade beim compilieren. Schon bei der Zeile in der ich einen Int-Wert haben möchte knallts bei mir. Also falls mir jemand dort schon Hilfe geben könnte, wäre ich sehr dankbar
Zuletzt bearbeitet: