Programmoberfläche mit Java-Swing - Herangehensweise

Shisu

Mitglied
Hallo Leute,

die Suche (sei es in Google oder der Forensuche) lief leider erfolglos, da meine Frage nicht sonderlich schwer ist, jedoch eine Frage bezüglich der Herangehensweise enthält:

Ich steige von C++ auf Java um und möchte ein Programm schreiben. Wie ich einzelne Buttons und andere GUI-Elemente (Checkboxes, Textfelder,...) einfügen kann weiß ich. Ich möchte nun aber vernünftig sortiert (in form von "durchdacht") ein Kartenspiel erstellen, welches auf dem GUI simpel einmal die Hand der "Bank" und einmal die Hand des "Spielers" gegenüberstellt.
Mir fällt der Schritt von dem GUI als einziges darzustellendes Element zu dieser gruppierten Form sehr schwer, meine mangelnde Vertrautheit mit den zu benutzenden Klassen tut ihr Übriges: Es bleibt bei einem JFrame, richtig? Gibt es dann mehre JPanel? Oder einfach ein Sammelsurium von Elementen auf einem Panel?

Ich hoffe ihr versteht die Frage und könnt mir helfen, ich weiß einfach nicht, wie ich das gruppieren soll... -.-'

Gruß Shisu
 
Also generell ist ein JFrame als Repräsentation nicht verkehrt. Wie du das mit den Karten machst, kommt wohl auf das Kartenspiel an. Du könntest z.B. für jede Karte ein JPanel nehmen und diese darauf darstellen. Oder du machst einfach je ein JPanel für die Bank und den Spieler.
Ist schwer zu sagen, was man da empfehlen würde, ohne ein paar Informationen zu haben. Allgemein bist du aber meistens mit JPanels, LayouManagers, evtl. JLabel, gut bedient.
 
Hey Leute,

ausgehend von eurer beiden Hinweisen würde ich das Spielfeld in etwa so einschätzen... Grafik des Spielfelds.

Ist es also Richtig, dass sich ein JFrame darum herum befindet, sich darin das Layout mit den Schwarzen Linien befindet und sich darin einmal rechts ein JPanel mit einer Art GridLayout befindet, während sich links zwei JPanels (Rot) befinden? ... naja, ich denke, dafür wird es kein gescheites Layout geben? Die innersten Elemente links wie Karten darf ich dann wohl absolut setzen, richtig?

Ich hoffe, meine Frage ist nun nicht zu nah am Projekt und danke für bereits gestellte sowie kommende Hilfe!

Gruß Shisu
 
Für die Karten würde ich GridLayout benutzen, da kannst du alles über die GridBagConstraints einstellen, bist dann super flexibel!
 
GridLayout benutzen, da kannst du alles über die GridBagConstraints

Du meinst wohl eher GridBagLayout. Das sollte man mit Vorsicht genießen, denn es ist zwar mächtiger, aber auch komplexer als andere Layouts. Eine schöne alternative dazu ist, Layouts auf Paneln zu verwenden und diese ineinander zu schachteln.
 
Du meinst wohl eher GridBagLayout. Das sollte man mit Vorsicht genießen, denn es ist zwar mächtiger, aber auch komplexer als andere Layouts. Eine schöne alternative dazu ist, Layouts auf Paneln zu verwenden und diese ineinander zu schachteln.

Jup! Hast Recht, natürlich meine ich GridBagLayout. Alles ist anfangs komplex :rtfm: Nach paar Übungen hat man den Dreh raus. Da sollte man keine Angst vor anfänglicher Komplexität haben!
 
Hey ssoul26,

Natürlich "sollte" man sich nicht abschrecken lassen, aber gerade als Neuling im GUI-Bereich sollte ich mein erstes Java-Programm doch besser etwas simpler beginnen, meinst du nicht?

Gruß Shisu

Prinzipiell stimme ich dir schon zu, aber so schwer ist es wirklich nicht! Die meisten haben angst davor, das GridBagConstraint nicht richtig zu verwenden, aber für den Anfang reichen nur die Aufrufe, gridX und gridY. Damit kannst du alles platzieren wohin du willst.


Bsp.: Links Label, rechts Textfeld (geht auch gut mit FlowLayout)
Java:
GridBagConstraint c = new GridBagConstraint();
c.gridx=0;
c.gridy=0;
panel.add(new JLabel("huhu"),c);
//jetzt eins nach rechts springen
c.gridx=1;
panel.add(new JTextField(80),c);
 
Hallo liebe Leute,

ein hoffentlich letztes mal möchte ich zu diesem Thema eine Frage stellen.

Ich bin mir nun relativ im Klaren, wie ich die visualisierung gestalten kann. Eine Frage habe ich jedoch: Das Programm selbst "hat" das GUI doch, oder? Zumindest sähe so meine Variante aus. Nun frage ich mich jedoch, wie so die Ereignisverwaltung vernünftig (d.h. nach der OOP) realisiert wird. Ich kann aus der Unterklasse GUI ja schlecht eine Methode in der besitzenden Klasse aufrufen, oder?

Ist das gerade unnötig, weil meine Vorstellung von der "Hierarchie" falsch sind, oder muss ich das über etwas wie eine Methode "getEvent()" lösen, die dann auf Anfrage die nötigen Informationen bereitstellt?

Viele Grüße und vielen Dank,
Shisu
 
Du kannst auch alles in eine Klasse Schreiben ^^ (Ist natürlich das schlimmste, was du machen kannst).
Das MVC-Pattern ist dort eine Möglichkeit.Klick mich mal
Wie und wo du was verwaltest, hängt aber von Dir ab. Sei kreativ 🙂.

Gruß Vanny
 
Hey Vanny,

ich habe mir das MVC-Schema angesehen, doch verstehe ich nach viel zu viel Details immernoch nicht, wie genau das Event auf dem GUI in den Controller kommt. Sehe ich den Wald vor lauter Bäumen nicht?!
Oder ist es tatsächlich so schwer?

Gruß Shisu
 
Listener in Java werden an Graphischen Komponenten "befestigt" und werden dann benachrichtigt, wenn etwas an der Komponente passiert. Bekannte Vertreter: ActionListener, ChangeListener, MouseListener, etc.
 
Listener in Java werden an Graphischen Komponenten "befestigt" [...]

Hey Njans,

das kenne ich ansich bereits, doch bisher habe ich nicht versucht, einen eigenen zu schreiben. Muss ich das in diesem Falle tun, oder wie kann ich auf den Listener Zugreifen? Auch dieser müsste doch in der GUI Klasse - verborgen vor der Oberklasse - liegen?

Gruß Dennis
 
Du implementierst das Interface in einer neuen Klasse/ Anynomen Klasse/Innere Klasse und gibst dann dem Listener somit die gewünschte Funktion.
So hat der ActionListener nur die Methode actionPerformed (ActionEvent), welche du überschreibst.
 
Es ist zumindest nicht leicht 🙂 und es gibt verschiedene Herrangehensweisen.
Wichtig ist erstmal für den Einstieg nur, dass Du es schaffst, die Logik von der GUI zu trennen eben mit einer Klasse die das "Handeln" übernimmt.
GUI: zeigt was los ist.
DatenModell: weiss was los ist
Controller: macht was los 😛

Gruß Vanny

PS: am simpelsten für den Grundeinstieg finde ich das Beispiel, das Threadpool am Ende des Tutorials gepostet hat.

Gruß Vanny
 
PS: am simpelsten für den Grundeinstieg finde ich das Beispiel, das Threadpool am Ende des Tutorials gepostet hat.

Gruß Vanny

Hey Vanny, hey njans.

@Njans: Leider fehlte mir bei deiner Antwort der Durchblick, ich habe sie leider nicht richtig verstehen können.

@Vanny: Oben genanntes Beispiel hat mir nun die Augen geöffnet. Die Antwort, die meine Frage exakt beantwortet hätte, wäre: "Der Listener wird zunächst dem GUI und anschließend dem jeweiligen Objekt übergeben. Der Listener muss nicht dem GUI selbst gehören.".

Danke an alle, jetzt sollte es soweit wieder fluppen.

Gruß Shisu
 
Okay, dann eben ein Beisiel (annonyme Klasse):
Java:
JButton button = new JButton("Mein Knopf");
button.addActionListener(new ActionListener() {
  
  public void actionPerformed(ActionEvent e)
  {
     // hier machst du etwas, wenn man den Button anklickt
  }
};
 
@Njans:
Ich habe das, was ich wissen wollte, ja nun verstanden. Und dieser Part fehlt in deinem Beispiel sogar, danke trotzdem für deine Mühen! 🙂

@Vanny:
Die Antwort hast du ja dennoch geben können, von daher: Danke vielmals! 😉
 

Zurück
Oben