Programmteile verknüpfen

Status
Nicht offen für weitere Antworten.

Zaphi67

Mitglied
Hallöchen.

Mal wieder ne warscheinlich sau blöde Anfängerfrage. Ab so sind wir Anfänger nunmal :).
Ich habe vor ein Spielechen zu schreiben. Und das ganze stelle ich mir so vor. Wenn das Spiel gestartet wird erscheint als erstes ein Fenster in dem man die Lizensbedngungen akzeptieren muß (eigentlich nur um das zu üben, da gibts nicht wirklich Lizensbedingungen).
[HIGHLIGHT="Java"]import javax.swing.*;
import java.awt.*;

public class Startscreen {

/**
* @param args
*/
public static void main(String[] args) {
String ls = System.getProperty("line.separator");
String text = "Bitte lesen sie sich die Nuzungbedingungen durch"+ls+ls+
"Hier stehen dieNuzungbedingungen";
JFrame start = new JFrame("Marko`s Java Quiz");
start.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
start.setSize(500, 300);
start.setLocationRelativeTo(null);
start.setResizable(false);
start.getContentPane().setLayout(new FlowLayout());

JTextArea terms = new JTextArea(text);
terms.setEditable(false);
terms.setLineWrap(true);
terms.setPreferredSize(new Dimension(460, 200));
start.add(terms);
JCheckBox check = new JCheckBox("ich akzeptiere die Lizensbedingungen");
start.add(check);
JButton ok = new JButton("OK");
start.add(ok);


start.setVisible(true);

}

}
[/HIGHLIGHT]
anschließend (wenn Auswahlbox = true, und OK gedrückt wurde) öffnet sich das nächste Fenster in dem die Anzahl der Spieler festgelegt wird.
[HIGHLIGHT="Java"]import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.*;
public class numbersOfPlayer {

/**
* @param args
*/
public static void main(String[] args) {
JFrame player = new JFrame("Wieviele Spieler");
String ls = System.getProperty("line.separator");
player.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
player.setSize(500, 300);
player.setLocationRelativeTo(null);
player.setResizable(false);
player.getContentPane().setLayout(new GridLayout(3,1));

JPanel infos = new JPanel();
player.add(infos);

JLabel playerinfo = new JLabel("Wieveiele Spieler möchten mitspielen?");
infos.add(playerinfo);

JPanel radios = new JPanel();
player.add(radios);

JRadioButton one= new JRadioButton("1 Spieler");
JRadioButton two= new JRadioButton("2 Spieler");
JRadioButton three = new JRadioButton("3 Spieler");
JRadioButton four = new JRadioButton("4 Spieler");
radios.add(one);
radios.add(two);
radios.add(three);
radios.add(four);
ButtonGroup selectPlayer = new ButtonGroup ();



JPanel buttons = new JPanel();
player.add(buttons);

JButton ok = new JButton("ok");
buttons.add(ok);

player.setVisible(true);
// TODO Auto-generated method stub

}

}
[/HIGHLIGHT]
danach (Radiobuttongroup und klick auf OK)je nach Anzahl der Spieler das nächste Fenster in dem der Spieler aufgefordert wird seinen Namen einzugeben. Je nach Anzahl der Spieler wieder holt sich das bis alle Spieler ihren Namen eingegeben haben.
Bis hier bin ich leider noch nicht, hab also keinen Code für die Fenster.
Danach gehts dann weiter zum eigentlichen Spiel.

Wie verknüpfe ich nun die Fenster. Ich hab die beiden ersten in einem Projekt, selbes Paket, zwei Klassen. Ich denke mal so macht man das? Oder muß das alles in einer Klasse sein(würde ein ellenlanger Code werden)?
Un dann war da ja noch was mit Vererbung. Das hab ich noch nicht richtig verstanden. Aber ich denke, da die Fenster die selben Eigenschaften haben (also besser ich könnte die so machen) Z.b.Alle Fenster bis zum Hauptprogramm haben gleiche Größe, Gridlayout(3 Zeilen) und in jeder Zeile ein Panel. Das kann ich doch bestimmt nutzen damit ich das Fenster nicht jedesmal neu schreiben muß sonder nur noch die Komponenten reinpacken muß, die natürlich immer andere sind.
 
Zuletzt bearbeitet:

hdi

Top Contributor
Deinem JFrame verpasst du ein CardLayout:

How to Use CardLayout (The Java™ Tutorials > Creating a GUI with JFC/Swing > Laying Out Components Within a Container)

die einzelnen Inhalte (EULA, Player anzahl wählen, Player Namen verteilen usw) erstellst du jeweils in einem eigenen Panel und tauscht diese Panels dann im Frame aus.

Du solltest also eine Klasse haben, die das Frame ist, sowie für jedes Panel eine eigene Klasse. Gerne kannst du die alle von einer abstrakten JPanel Klasse ableiten, falls die Gemeinsamkeiten haben (zB gleiche Grösse, Hintergrundfarbe usw).

Im OO-Design bekommt generell (als Faustregel, klar gibt's Ausnahmen) jedes Subjektiv in einer Problem-Beschreibung eine eigene Klasse.

Bsp:
"ICh habe ein Fenster" -> Klasse MyFrame extends JFrame "und das hat zuerst die Lizenz" -> Klasse Eula extends JPanel "und dann kann man die Anzahl der Spieler auswählen" -> Klasse PlayerSetup extends JPanel" usw...
 

Zaphi67

Mitglied
Deinem JFrame verpasst du ein CardLayout:

How to Use CardLayout (The Java™ Tutorials > Creating a GUI with JFC/Swing > Laying Out Components Within a Container)

die einzelnen Inhalte (EULA, Player anzahl wählen, Player Namen verteilen usw) erstellst du jeweils in einem eigenen Panel und tauscht diese Panels dann im Frame aus.

Du solltest also eine Klasse haben, die das Frame ist, sowie für jedes Panel eine eigene Klasse. Gerne kannst du die alle von einer abstrakten JPanel Klasse ableiten, falls die Gemeinsamkeiten haben (zB gleiche Grösse, Hintergrundfarbe usw).

Im OO-Design bekommt generell (als Faustregel, klar gibt's Ausnahmen) jedes Subjektiv in einer Problem-Beschreibung eine eigene Klasse.

Bsp:
"ICh habe ein Fenster" -> Klasse MyFrame extends JFrame "und das hat zuerst die Lizenz" -> Klasse Eula extends JPanel "und dann kann man die Anzahl der Spieler auswählen" -> Klasse PlayerSetup extends JPanel" usw...

Das ist schmal was dasmich weiterbringt. Wenn ich das also richtig interpretiere steht am Ende doch alles in einem Code? (ich arbeite mit eclipse).
Im Moment (habe inzwischen alle Fenster fertig) habe ich wie schon erwähnt alle Fenster in einer extra Klasse (also insgesammt 5 class. Dateinen.
 

hdi

Top Contributor
Äh ne es steht nicht allen in einem "Code". Jede Klasse ist public und bekommt ihre eigene .java Datei.
 

Zaphi67

Mitglied
Äh ne es steht nicht allen in einem "Code". Jede Klasse ist public und bekommt ihre eigene .java Datei.

Ok. Nur nochmal zum Verständnis (ich weiß ich nerve ;-)).
Ich mache mir also eine Klasse (sozusagen Oberklasse oder Superklasse) in der ich das Fenster konstruiere.
Dann viele Unterklassen für die wechselnden Inhalte des Fensters. Es wird also nicht jedesmal ein neues Fenster gestartet (so war eigentlich der Plan :)), sondern es werden nur die Inhalte ausgetauscht.
Für das eigentliche Spiel (soll ein Quiz sein) mach ich mir aber ein neues Fenster weil das ja wieder ein komplett anderes Layout hat.
Wenn alle Einstellungen vorgenommen sind, also Lizens ist aktzeptiert, Spieleranzahl festgelegt, Spielernamen sind eingegeben und (hatte vergessen das da noch 8 verschiedene Wissensgebiete per CheckBox ausgewählt werden können)die Wissensgebiete ausgewählt sind dann schließt sich das Fenster und es öffnet sich das Fenster des eigentlichen Spiels das inzwischen bereits die Parameter (Spieleranzahl, Spielernamen, Wissensgebiete) übernommen hat (ohjjeee wie geht das wieder. Das wird noch ne echte Herausforderung für jemanden der sich grad mal seit einer Wochemit Java beschäftigt)?
Das mit dem CardLayout bekommich nicht wirklich hin. Geht das nicht auch mit meinem GridLayout. Hab das alles so schön gemacht :-(
 
Zuletzt bearbeitet:

hdi

Top Contributor
Also, wenn du erst seit 1 Woche programmierst, vergiss mal striktes OO Design. Schreibe dir ein JFrame, das ein einziges Panel hat. In diesem Panel kann man alle Einstellungen auf einmal vornehmen.
Unten gibt es einen Button "Start", der allerdings erst gedrückt werden kann, wenn man alle Einstellungen vorgenommen hat.

Und wenn du den drückst, schliesst sich das Frame und es kommt das neue Frame, in dem das tatsächliche Spiel abläuft. Dann klärt sich auch die Frage:

und es öffnet sich das Fenster des eigentlichen Spiels das inzwischen bereits die Parameter (Spieleranzahl, Spielernamen, Wissensgebiete) übernommen hat (ohjjeee wie geht das wieder.
Ganz einfach: Im ActionListener dieses Start-Buttons erstellst du dein Frame, dessen Konstruktor diese Daten halt erwartet.

Mach das erstmal so. Wenn du das hast, kann man noch immer einzelne Bereiche deines Einstellungspanels in eigene Panels verpacken.
 

Zaphi67

Mitglied
Also, wenn du erst seit 1 Woche programmierst, vergiss mal striktes OO Design. Schreibe dir ein JFrame, das ein einziges Panel hat. In diesem Panel kann man alle Einstellungen auf einmal vornehmen.
Unten gibt es einen Button "Start", der allerdings erst gedrückt werden kann, wenn man alle Einstellungen vorgenommen hat.

Und wenn du den drückst, schliesst sich das Frame und es kommt das neue Frame, in dem das tatsächliche Spiel abläuft. Dann klärt sich auch die Frage:


Ganz einfach: Im ActionListener dieses Start-Buttons erstellst du dein Frame, dessen Konstruktor diese Daten halt erwartet.

Mach das erstmal so. Wenn du das hast, kann man noch immer einzelne Bereiche deines Einstellungspanels in eigene Panels verpacken.

Also wenn dann solls ja auch cool aussehen. Mal davon abgesehen das ich nicht wirklich weiß wie man mit nem ActionListener umgeht kann das doch nicht so schwer sein wenn ich das mal raffe. Nehmen wir mal an ich schreibe alles bis zum Spielfenster doch in einen Code. Ungefähr so:
Beim Start öffnet sich das Fenster (sagen wir mal Hauptfenster) indem dann erstam Panel(Terms) ist, also der Panel mit den Lizenzbedingungen und dem der Checkbox und dem OK Button.
Auf OK Button kommt dann der AktionListener der sollmachen(so Leienhaft):
if CheckBox gehakt und Ok Button gedrückt
entleere Hauptfenster und pack Panel(Spieleranzahl) rein. Und der hat ja dann auch wieder nen OK Button.
 

hdi

Top Contributor
Mal davon abgesehen das ich nicht wirklich weiß wie man mit nem ActionListener umgeht kann das doch nicht so schwer sein wenn ich das mal raffe.
Stimmt, das trifft aber auf so ziemlich alles im Leben zu. Egal wie leicht oder schwer es ist. Die Frage ist, wie schnell du das lernen kannst. Die Antwort ist: ziemlich schnell ;)
Ich hab jetzt leider grad keine Zeit, aber ich denke hier könnte dir bestimmt jmd ein kleines ActionListener Bsp geben. Das sind 3 Zeilen Code.
 

Zaphi67

Mitglied
Stimmt, das trifft aber auf so ziemlich alles im Leben zu. Egal wie leicht oder schwer es ist. Die Frage ist, wie schnell du das lernen kannst. Die Antwort ist: ziemlich schnell ;)
Ich hab jetzt leider grad keine Zeit, aber ich denke hier könnte dir bestimmt jmd ein kleines ActionListener Bsp geben. Das sind 3 Zeilen Code.

Wär echt super wennmir jemand mal so prinzipiel und verständlich erklären könnte wie man ActionListener anwendet. Ich hab mir mal ein kleines Übunsprogram geschrieben. Den Aktionlistener hab ich geklaut. Irgendwie macht der garnicht was ich will. Obwohl das Prog läuft. Der soll eigentlich nur das Hauptfenster leeren und das nächste Panel einfügen. Dann versteh ich da nochwas an der Syntax nicht. Was macht die Klammer da an der Stelle woich den Komentar eingefügt hab????
[HIGHLIGHT="Java"]package Swing;

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Date;

public class Panels {

/**
* @param args
*/
public static void main(String[] args) {
final JFrame main = new JFrame("Testfenster");
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setSize(500,300);

final JPanel termspanel = new JPanel();
termspanel.setLayout(new GridLayout(3,1));

JTextArea terms = new JTextArea("text");
terms.setEditable(false);
terms.setLineWrap(true);
terms.setPreferredSize(new Dimension(460, 200));
termspanel.add(terms);

JButton ok = new JButton("OK");
termspanel.add(ok);
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JPanel numberspanel = new JPanel();
numberspanel.setLayout(new GridLayout(3,1));

main.remove(termspanel);
main.add(numberspanel);
}
});//Was macht die Klammer hier????




main.add(termspanel);//nach Zeile 32 verschoben
main.setVisible(true);
// TODO Auto-generated method stub

}
}
[/HIGHLIGHT]
Nachtrag: Hab mal testweise in Zeile 40 ne Printanweisung hinzugefügt. Das funktioniert.Text wird auf Buttondruck ordungsgemäß in der Konsole ausgegeben.
 
Zuletzt bearbeitet:

hdi

Top Contributor
});//Was macht die Klammer hier????

Was da gemacht wird, ist eine "anonyme innere Klasse" erstellen:

[HIGHLIGHT="Java"]button.addSomething (new Something(){
@Override
public void doSomething(){
System.out.println("Ich bin eine Methode in einer Klasse");
}
});[/HIGHLIGHT]

erstellt dir eine neue Klasse, die von Something erbt und eine Methode implementiert bzw. überschreibt. D.h. obiger Code mit dem Klammergewurschrtel (wenn du nachzählst siehst du aber dass die Klammern alle dahin müssen) ist das selbe wie:

[HIGHLIGHT="Java"]public class SomethingImpl extends Something{
@Override
public void doSomething(){
System.out.println("Ich bin eine Methode in einer Klasse");
}
}
[/HIGHLIGHT]
und dann

[HIGHLIGHT="Java"]button.addSomething(new SomethingImpl());[/HIGHLIGHT]

Anonyme Klasse sind ganz einfach eine Kurzschreibweise, und auch üblich bei so Dingen wie einem ActionListener. Der Grund liegt darin dass du wohl niemals mehr als 1 Instanz dieser Klasse brauchst, dafür generierst du sie halt nur mal eben schnell und machst gleich direkt eine Instanz, und addest sie als Listener.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Programmteile in Klassen auslagern Java Basics - Anfänger-Themen 2
C Threads Auffindung noch laufender Programmteile Java Basics - Anfänger-Themen 2
J Programmteile überspringen Java Basics - Anfänger-Themen 11
F 2 Programmteile synchronisieren (Threads?) Java Basics - Anfänger-Themen 3
Zeppi OOP Methoden mit einander Verknüpfen Java Basics - Anfänger-Themen 6
T JRadioButton verknüpfen Java Basics - Anfänger-Themen 1
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
G Klassen verknüpfen Java Basics - Anfänger-Themen 1
U ActionListener mit JMenuItems verknüpfen Java Basics - Anfänger-Themen 1
K Arrays verknüpfen Java Basics - Anfänger-Themen 52
J Hilfe beim "Verknüpfen" von zwei Klasse Java Basics - Anfänger-Themen 15
M Erste Schritte Probleme beim Verknüpfen von Methoden Java Basics - Anfänger-Themen 15
J Methoden verknüpfen Java Basics - Anfänger-Themen 15
T Mehrere Methoden in der main-Methode verknüpfen und aufeinander anwenden Java Basics - Anfänger-Themen 2
1 Zahlen mit Zahlen verknüpfen Java Basics - Anfänger-Themen 2
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
S Strings verknüpfen Java Basics - Anfänger-Themen 9
T Fragen zu Set / Relationen verknüpfen Java Basics - Anfänger-Themen 4
O Objekte verknüpfen? Java Basics - Anfänger-Themen 7
H Bedingungen miteinander verknüpfen Java Basics - Anfänger-Themen 2
S Felder mit Variablen/Tabellen verknüpfen! Java Basics - Anfänger-Themen 3
J if Bedingungen verknüpfen Java Basics - Anfänger-Themen 8
J Variablen Rechenzeichen und Zahlen verknüpfen für einen Taschenrechner Java Basics - Anfänger-Themen 17
F Bedingungen mit Abfragen verknüpfen Java Basics - Anfänger-Themen 7
B GUI- Klasse mit Hauptklasse "verknüpfen"? Java Basics - Anfänger-Themen 13
L ArrayList Elemente verknüpfen Java Basics - Anfänger-Themen 2
K Listen miteinander verknüpfen Java Basics - Anfänger-Themen 4
K Klassen verknüpfen Java Basics - Anfänger-Themen 10
E klassen verknüpfen Java Basics - Anfänger-Themen 2
E Klassen verknüpfen Java Basics - Anfänger-Themen 9
sqsh jtable mit jlabels verknüpfen Java Basics - Anfänger-Themen 2
O Verknüpfen von Gui mit Klassen Java Basics - Anfänger-Themen 6
P "Enter"-Taste mit Button verknüpfen Java Basics - Anfänger-Themen 3
T 2D-Array mit GUI verknüpfen Java Basics - Anfänger-Themen 4
Screen Klassen verknüpfen, Swingobjekte mit Klassen verknüpfen Java Basics - Anfänger-Themen 13
S Programm mit Website verknüpfen Java Basics - Anfänger-Themen 3
S 2 JComboBoxen miteinander verknüpfen Java Basics - Anfänger-Themen 4
H Java aus Netbeans mit innoDB Datenbank verknüpfen. Java Basics - Anfänger-Themen 7
J 2 Objekte verknüpfen Java Basics - Anfänger-Themen 5
G Werte miteinander verknüpfen und sortieren Java Basics - Anfänger-Themen 20
S Verknüpfen von Klassen Java Basics - Anfänger-Themen 2
D jMenubar mit Button verknüpfen Java Basics - Anfänger-Themen 3
G Button mit Internet verknüpfen? Java Basics - Anfänger-Themen 10
E Klassen verknüpfen Java Basics - Anfänger-Themen 11
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
S Jar Datei mit javaw verknüpfen Java Basics - Anfänger-Themen 3
S Noch ungelöst ! Klasse JTable und Klasse Drucken verknüpfen. Java Basics - Anfänger-Themen 8
J 2 Fenster miteinander verknüpfen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben