Informatik (Java) Zwei Frames mit dem selben Konstruktor?
Hey, ich hab eine Aufgabe bekommen, welche ich aber leider nicht wirklich gut lösen kann.
Die Aufgabe besteht darin, dass die Klasse mit JFrame erweitert werden soll und das der Actionlistener implementiert werden soll. Der Frame soll dabei im FlowLayout aus 2 Button bestehen mit den Aufschriften "Weiter" und "Ende".
Wird "Weiter" gedrückt = Erste Frame wird geschlossen und ein zweiter Frame mit NUR dem Button "Ende" wird geöffnet.
Wird "Ende" gedrückt = Alle Frames schließen sich und das Programm wird beendet.
Die beiden Frames sollen dabei mit dem selben Konstruktor erstellt werden.
Das Problem bei mir ist, dass ich es nicht schaffe beim 2. Frame nur "Ende" zu stehen haben.
Kann mir da bitte wer helfen??
Hier ist das, was ich bisher versucht habe:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class zweifenster extends JFrame implements java.awt.event.ActionListener {
JButton w1;
JButton e1;
JPanel p;
JLabel l;
public zweifenster(){
super();
this.setVisible(true);
this.setSize(400, 200);
p = new JPanel();
l = new JLabel();
w1 = new JButton("Weiter");
e1 = new JButton("Ende");
w1.addActionListener(this);
e1.addActionListener(this);
p.add(w1);
p.add(e1);
this.add(p);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==w1) {
zweifenster frr = new zweifenster();
this.dispose();
}
if(e.getSource()==e1) {
System.exit(0);
}
}
public static void main (String[] args) {
zweifenster fr = new zweifenster();
}
}
1 Antwort
(...) und ein zweiter Frame mit NUR dem Button "Ende" wird geschlossen.
Ich denke Mal, du meintest geöffnet. Andernfalls verstehe ich deine Beschreibung nicht.
Dem Konstruktor kannst du zwei Parameter geben.
public Zweifenster(String buttonTitel1, String buttonTitel2) {
Je nachdem, ob sie einen Wert haben, erstellst du Buttons und hängst sie dem Frame an.
if (buttonTitel1 != null && buttonTitel1.length() > 0) {
// add button1 ...
}
// etc.
Beim Erstellen der Fensterinstanz kann also entschieden werden, welche Buttons gerendert werden sollen oder nicht.
Beispiel:
new Zweifenster(null, "Ende"); // Fenster mit Ende-Button
new Zweifenster(null, null); // Fenster ohne Buttons
Zuletzt noch ein paar grundsätzliche Anmerkungen zu deinem Code:
- Klassennamen beginnen immer mit einem Großbuchstaben. Das ist eine übliche Java-Konvention, die dafür sorgt, dass Klassen beim Lesen sofort und einfach erkannt werden können.
- All deinen Elementen (Variablen, Klassen) solltest du passende, aussagekräftige Bezeichner verpassen. Mit w1, p, l kann man nicht so viel anfangen. Es macht das Lesen deines Codes nur schwerer als nötig.
- Die setVisible-Methode sollte erst aufgerufen werden, sobald das Fenster wirklich bereit zur Darstellung ist (also alle Einstellungen vorgenommen und das Anhängen aller Komponenten abgeschlossen wurde). So werden auch Zeichenvorgänge eingespart, die durchaus einige Ressourcen verbrauchen.
- Das Label verwendest du nirgendwo. Das Panel braucht kein Feld, so lange es nur im Konstruktor angesprochen werden muss.
- Dem Prinzip der Kapselung zufolge müssten alle deine Felder als private deklariert werden.