Erste Schritte Spieler an anderen Frame weitergeben

Creepaz

Bekanntes Mitglied
Moin wiedermal,

ich glaube langsam werde ich mit meinen Fragen lästig, ich weiss :D

Ich habe 3 Frames: Der Login-Frame wo man sich anmeldet, der Registrations-Frame wo man sich einen Account erstellen kann und den Frame der sichtbar wird sobald man sich erfolgreich eingeloggt hat.

Was ich an der Sache aber voll und ganz vergessen habe, ist die Tatsache das ich im Eingeloggten Frame ja natürlich wissen müsste um welchen Spieler es sich gerade handelt. Ich habe in diesem Frame eine Menübar, wo ich einen bestimmten Punkt nur sichtbar machen möchte wenn der Spieler einen bestimmten Rang hat. Um diesen Rang abzufragen, muss ich ja wissen welcher Spieler sich gerade eingeloggt hat und das an diesen Frame eben weitergeben. Wie könnte ich das ganz am besten realisieren?

Zu meinem Login-/Registrationssystem: Ich frage mittels einer Datenbank ab ob der Spieler darin vorkommt, falls ja wird der Loginframe geschlossen und der eingeloggte Frame geöffnet. Deshalb sehe ich momentan keine Möglichkeit um diesen Spieler an den dritten Frame weiterzugeben.
 

mihe7

Top Contributor
ich glaube langsam werde ich mit meinen Fragen lästig, ich weiss :D
Das glaub ich kaum, da gab es hier schon ganz andere...

das ich im Eingeloggten Frame ja natürlich wissen müsste um welchen Spieler es sich gerade handelt.
Was ist der "eingeloggte Frame"?

Um diesen Rang abzufragen, muss ich ja wissen welcher Spieler sich gerade eingeloggt hat und das an diesen Frame eben weitergeben. Wie könnte ich das ganz am besten realisieren?
Poor man's Variante: Login per Dialog. Nach dem Login den Frame erzeugen und dabei den Spieler mitgeben. Ansonsten: Google mal nach MVC.

Allgemeiner Tipp: bau die Anwendung erst ohne GUI, die kannst Du im Anschluss immer noch dranhängen.
 

Creepaz

Bekanntes Mitglied
Das glaub ich kaum, da gab es hier schon ganz andere...


Was ist der "eingeloggte Frame"?


Poor man's Variante: Login per Dialog. Nach dem Login den Frame erzeugen und dabei den Spieler mitgeben. Ansonsten: Google mal nach MVC.

Allgemeiner Tipp: bau die Anwendung erst ohne GUI, die kannst Du im Anschluss immer noch dranhängen.


Na dann hoffe ich mal das ich in nächster Zeit nicht zu den anderen dazugehöre ;)

Die Variante die du mir geschrieben hast, hatte ich tatsächlich auch so im Kopf, wollte nur eben erstmal was essen. Ich habe jetzt einen String erstellt, dieser wird beim Einloggen mit dem Username übergeben an meinen eingeloggten Frame. Dadurch kann ich den Spielername von dem String auslesen, und so wieder alle Spielerdaten der Datenbank auslesen.

Besten Dank :)
 

Robat

Top Contributor
Anstatt verschiedene JFrame Instanzen zu erstellen kannst du nur 1 JFrame benutzen und den Inhalt austauschen. Das geht zB über das CardLayout.
 

Creepaz

Bekanntes Mitglied
Okay, dann werde ich mir das bei Zeiten mal anschauen wenn es im Endeffekt soweit ist. Danke dir, wusste ich nicht. Habe jetzt für jeden "Bereich" einen neuen JFrame erstellt ._.
 

mihe7

Top Contributor
Na dann hoffe ich mal das ich in nächster Zeit nicht zu den anderen dazugehöre ;)
Ne, die Gefahr sehe ich bei Dir nicht - außer Du hast vor, schlagartig sämtliche Lernbereitschaft (bzw. -fähigkeit) einzustellen und Threads mit mehreren Hundert Kommentaren zu provozieren, damit Dir jemand Deine Aufgabe löst :)
 

Creepaz

Bekanntes Mitglied
Nö, das glaube ich jetzt doch nicht :D Darum frage ich hier immer nach, mir werden Optionen genannt die möglich sind, evtl. mit einem kleinen Stücken Code als Hilfe den ich mir dann selbst zurechtbastel (oder basteln muss) -> und meiner Meinung nach ist das genau der richtige Weg um sowas zu lernen ;)
 

Creepaz

Bekanntes Mitglied
Aber verwirrt bin ich gerade trotzdem.. der mag mir den Spieler nicht übergeben.

Database.java -> verarbeitet alles wegen Login. In der Funktion checkPlayerLogin wird der String "fetchUsername" auf username gesetzt. Sprich auf den Name des Spielers. In der selben Klasse gibt es die Funktion initializePlayer() wo fetchUsername dann returned wird.

LoggedInPage.java -> Hier landet man bei erfolgreichem Login. Dort gebe ich mir zum Testen eine Message. Die Message frage ich ab mit Database.initializePlayer(), kriege aber nicht den Usernamen sondern stets immer null... Warum? Bin mit meinen Möglichkeiten schon wieder am Ende. Total simpel wahrscheinlich, nur zu doof zum kapieren ._.
 

Creepaz

Bekanntes Mitglied
So, ich habe es jetzt gelöst.. aber ich glaube ihr werdet mich erschlagen *pfeif*

Das Problem war, dass die Message zu früh kam, sprich er hatte den Name noch nicht geladen. Jetzt habe ich es so gelöst, dass ich mir in der Klasse einen String username = ""; angelegt habe.

Der Title des Fensters wird in der Database gesetzt, sprich username + "Eingeloggt". In meiner LoggedInPage splitte ich den title, jage das ganze durch einen Timer und sobald das Fenster vollständig offen ist, danach wird erst die Message angezeigt. Sprich sobald der Timer abläuft (1000ms, 1 Sek) wird mir in der Message der Name angezeigt :)

Schwere Geburt und wahrscheinlich schlechte Lösung.. aber besser als gar keine Lösung, erstmal zumindest..


Edit: Bringt mir nix.. möchte den Spieler in der JMenuBar einfügen und das haut natürlich nicht hin wenn die Menübar schon gebaut ist bevor der Timer abläuft ._.
 
Zuletzt bearbeitet:

Creepaz

Bekanntes Mitglied
Hi,

habe gestern noch eine Lösung gefunden aber wollte jetzt nicht nochmal auf einen eigenen Post antworten ;) Die Lösung war jetzt, dass ich den Frame mit einer Verzögerung von 0,5 Sekunden öffnen lassen, was für den Code genügend Zeit ist um den Username als String an die Variable weiterzugeben. Davor war mein Fehler, dass ich es genau anders rum hatte und mir das dann nichts gebracht hat.

Wenn ich von der Spätschicht daheim bin poste ich später mal den dazugehörigen Code :)
 

Creepaz

Bekanntes Mitglied
In der LoggedInPage.php:
Java:
public static String username; //Eingeloggter Spieler

Funktion um Spielerlogin zu prüfen, mit dem Timer:
Java:
public static void checkPlayerLogin(String username, String password) {
  try {
   con = DriverManager.getConnection("jdbc:mysql://localhost/levelinggame?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "root", "");
   stmt = con.prepareStatement("select * from userdata where username = ?");
   stmt.setString(1, username);
   rs = stmt.executeQuery();
   
   boolean userExists = rs.next();
   
   if(userExists != false) {
    String uPWD = password;
    int activated = rs.getInt("activated");
    if(uPWD.equalsIgnoreCase(rs.getString("PASSWORD"))) {
     if(activated == 1) {
      //Eingeloggt
      Timer timerCheckLogin = new Timer(true);
      timerCheckLogin.schedule(new Database(), 100);
     
      LoggedInPage.username = username;
      FrameCreator.frameLogin.setVisible(false);
     } else {
      JOptionPane.showMessageDialog(null, "Dein Account ist vorrübergehend deaktiviert!", "Account deaktiviert", JOptionPane.PLAIN_MESSAGE);
     }
    } else {
     //Login fehlgeschlagen!
     JOptionPane.showMessageDialog(null, "Falsches Passwort eingegeben!", "Falsche Anmeldedaten", -1);
    }
   } else {
    JOptionPane.showMessageDialog(null, "Dein Account wurde nicht gefunden! \n\nBitte registriere dich zuerst!", "Kein Account gefunden", -1);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }

Der Timer:
Java:
@Override
 public void run() {
  try {
   new LoggedInPage();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  
  FrameCreator.loggedIn.setTitle(LoggedInPage.username + " | Eingeloggt");
  FrameCreator.loggedIn.setVisible(true);
 }


Also so funktioniert das ganze nun ohne Probleme. Werde aber wenn ich mal wieder etwas Zeit hab, den Spieler nichtmehr als String eingeben sondern direkt auf Player xy umbauen. Scheint mir wohl doch logischer.
 

mihe7

Top Contributor
Also so funktioniert das ganze nun ohne Probleme.
Das wage ich zu bezweifeln. Wenn Du hier einen Timer brauchst, stimmt was nicht. Außerdem schließt Du weder Statement, noch Connection und wer überall mit static arbeitet, bekommt früher oder später mit an Sicherheit grenzender Wahrscheinlichkeit ein Problem :)
 

Creepaz

Bekanntes Mitglied
Naja, das mit dem Timer liegt daran, dass dieser Frame direkt beim Starten des Programms generiert wird und so auch der Username auf null gesetzt wird. Durch den Timer habe ich die benötigte Verzögerung, um alles zu übergeben (was niemals 0,5 Sekunden dauert einen String zu übergeben - ohne Timer will er trotzdem nicht :O)

Inzwischen habe ich tatsächlich einiges dazu gelernt, und weiß das es k*** erstellt wurde. Allerdings soll das mehr oder weniger als Test und Versuchsobjekt dienen, weshalb ich nicht nochmal alles komplett neu aufbauen möchte ;-)
 

Creepaz

Bekanntes Mitglied
@mihe7 Könntest du mir evtl kurz nochmal erklären, warum genau die static-Methoden evtl. irgendwann mal Probleme bereiten können wenn jetzt aktuell alles funktioniert? Ich weiss vom Sinn her das es blöd aufgebaut ist, aber weshalb Probleme auftreten könnten da bin ich noch nicht ganz mitgekommen.
 

mihe7

Top Contributor
static-Methoden sind per se nicht das große Problem, so lange sie reine Funktionen darstellen, also keine Änderungen vornehmen (Beispiel: Math.sin()). Für die funktionale Programmierung ist das äußerst praktisch. Meistens wird aber auf andere Variablen zugegriffen, die dann ebenfalls static sein müssen und damit global zur Verfügung stehen.

Gerade diese Eigenschaft erscheint sehr praktisch, schließlich man kann von überall auf solche Variablen zugreifen, ohne sich mit irgendwelchen Objekten herumschlagen zu müssen. Tatsächlich gibt man dadurch aber etwas aus der Hand, das ich als die logische Struktur der Anwendung bezeichnen würde: das Zusammenspiel der Einzelteile zur Laufzeit. Da man einer Methode von außen nicht ansieht, was sie intern macht, weißt Du nie, auf welche statischen Variablen in welcher Form zugegriffen wird (ohne sich den Code der Methode im Detail anzusehen).

Weiß der Programmierer nicht genau, was er tut, bekommst Du Spaghetti-Code, durch den die Anwendung z. T. fürchterlich fragil wird. Dadurch tritt dann z. B. unerwünschtes Verhalten der Anwendung auf, das sich zunächst nicht erklären lässt. Um die Ursachen zu finden, suchst Du Dich dumm und dusselig.

Es gibt noch ein paar weitere Punkte, wie z. B. der Verlust von Polymorphie oder der Testbarkeit aber das führt jetzt zu weit und der Punkt oben sollte Erklärung genug sein, warum static nur "wohl dosiert" eingesetzt werden sollte :)
 
X

Xyz1

Gast
@Creepaz Wenn Du alles statisch machst - also auch statische innere Klassen usw. dann läufst Du ab einer gewissen Levelhöhe in einen Bug. Das hatte ich auch schonmal, es kann aber sein das dieser Bug in Java > 8 inzwischen behoben wurde.

Also wär es ratsam, strikt objektorientiert vorzugehen.
 

Creepaz

Bekanntes Mitglied
@mihe7 & @Tobias-nrw

Vielen Dank für die ausfürlichen Antworten. Habe nun wohl endlich mal kapiert, was das ganze ausmacht. Werde dann in meinen nächsten Projekten schauen, dass Funktionen usw. um einiges besser gegliedert werden, um eben nicht alles auf static schreiben zu müssen.

Tobias, bis jetzt hatte ich noch keinen Bug, aber so wie ich das rausgelesen habe ist das auch nur noch eine Frage der Zeit. Werde mich wohl nun doch mal hinsetzen und alles umschreiben, das alles so funktioniert wie es sein soll.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
M PNG als Spieler im Fenster anzeigen Java Basics - Anfänger-Themen 4
L Einfaches Kartenspiel (Spieler Klasse) Java Basics - Anfänger-Themen 14
H Spieler bewegen :) Java Basics - Anfänger-Themen 6
I Spieler Name eintragen und Random Gewinner Java Basics - Anfänger-Themen 4
J Spieler bewegen Java Basics - Anfänger-Themen 3
TheKing Spieler Position mit Array vergleichen Java Basics - Anfänger-Themen 2
T Blobby Volley Spieler schreiben Java Basics - Anfänger-Themen 4
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Gibt es einen anderen Weg um "{}" in IntelliJ zu schreiben? Java Basics - Anfänger-Themen 5
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
I XML und Interfaces aus anderen Projekten Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 6
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
V_Fynn03 Kontostand anzeigen lassen von einer anderen Klasse Java Basics - Anfänger-Themen 3
X Auf Attribut einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 2
H Arraydaten aus einer anderen Methode ausgeben Java Basics - Anfänger-Themen 4
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
E Eigenschaften Werte, in einer anderen Klasse, zuweisen Java Basics - Anfänger-Themen 40
M CellReender Zellenfarbe int abhängigkeit einer anderen Zelle Java Basics - Anfänger-Themen 13
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
H Methoden Nutzung der Werte einer ausgeführten Objektmethode in anderen Objektmethoden Java Basics - Anfänger-Themen 2
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
I Instanz einer anderen Klasse zurückgeben Java Basics - Anfänger-Themen 34
F Auf Array einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 4
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
J Eclipse Einrichten : Umzug in anderen Ordner Java Basics - Anfänger-Themen 2
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
K In einem Case gefüllte Arraylist in einer anderen Case ausgeben Java Basics - Anfänger-Themen 2
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
L Variable aus einer Klasse in einer anderen Klasse nutzen Java Basics - Anfänger-Themen 6
K Klassen Array einer anderen Klasse ... Java Basics - Anfänger-Themen 21
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
J Zahlensequenz mit einer anderen Sequenz vergleichen Java Basics - Anfänger-Themen 6
N Attribut einer anderen Klasse übertragen/verwenden Java Basics - Anfänger-Themen 5
T Klassen Klasse in einer anderen Klasse verwenden. Java Basics - Anfänger-Themen 3
J Die Y Koordinate von einer anderen Klasse auch verändern Java Basics - Anfänger-Themen 1
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
karlmasutra Klassen Rückgabe eines Wertes aus einer anderen Klasse Java Basics - Anfänger-Themen 3
S Auf Array einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 13
F Aus einer anderen Klasse auf ein JTextField zugreifen Java Basics - Anfänger-Themen 17
A OOP Methodenaufruf in einer anderen Klasse Java Basics - Anfänger-Themen 2
M Erste Schritte Arraylist in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 11
D ArrayList in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 7
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
C Klassen Klassenaufruf eines anderen Objektes Java Basics - Anfänger-Themen 6
R Variablen MouseListener funktioniert auf anderen Pcs nur bedingt Java Basics - Anfänger-Themen 6
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Mit Buttonklick Farbe der anderen Buttons verändern? Java Basics - Anfänger-Themen 2
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
M Klassen Funktionen aus anderen Klassen benutzen Java Basics - Anfänger-Themen 3
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
N Methoden Attribut Abfrage eines anderen Objektes Java Basics - Anfänger-Themen 36
C char in String suchen und durch anderen String ersetzen Java Basics - Anfänger-Themen 2
A Kann man ein Attribut aus einer anderen Klasse nutzen? Java Basics - Anfänger-Themen 3
GreenTeaYT Wie gebe ich Informationen von einer Klasse zur anderen Klasse? Java Basics - Anfänger-Themen 9
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
H Variable einer anderen Klasse importieren Java Basics - Anfänger-Themen 2
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
W Elemente aus einer anderen GUI steuern! Java Basics - Anfänger-Themen 13
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
G Stringwerte aus anderen Klassen aufrufen. Java Basics - Anfänger-Themen 19
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
K Klassen Nachträglich ein Objekt einem anderen zuweisen, geht das? Java Basics - Anfänger-Themen 2
OlafHD Variable aus einer anderen Klasse Verwenden Java Basics - Anfänger-Themen 11
S Methoden Methode einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 5
B Taste "Enter" drücken in einem anderen Programm? Java Basics - Anfänger-Themen 6
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
H Klassen varibale einer klasse in einer anderen klasse aufrufen und häufigkeit ausgeben Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben