Eine Methode über Actionlistener beenden

Herr.Blacky

Mitglied
Schönen guten Abend,

Vorweg, ich bin komplett neu im Themengebiet und habe vor knapp zwei Wochen angefangen.

Zu meinem Problem. Ich möchte mir ein Zahlen-Rate-Spiel programmieren, es wird eine zufällige Zahl erzeugt, die dann der Anwender erraten muss, natürlich mit verschiedenen Tipps. Klappt auch gut.
Nun, ich habe mir eine Klasse erstellt, dort sind die verschiedenen Methoden, die ein Fesnster erzeugen.
In einer dieser Fenster-Methode habe ich den Actionlistener auf einem Button angemeldet um ein neues Fenster aufzurufen, klappt auch! Doch, wie bekomme ich das erster Fenster geschlossen?

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Actionlistener2 implements ActionListener
{


        @Override
        public void actionPerformed(ActionEvent e) {
        
            FensterBib Fenster1 = new FensterBib();
            Fenster1.Frame1();
            
            
            
        }
        
}



import javax.swing.*;
import javax.swing.JFrame;

public class FensterBib  {
    
    
    public void Frame0 () {
       
        //JFrame Stuff.......
       

        JButton B1 = new JButton("Generieren");
        B1.setVisible(true);
        South.add(B1);
        B1.addActionListener(new Actionlistener2());
}
}


Frame0 () wird von der Mainmethode aufgerufen.

Wie gesagt, klappt soweit alles. Bin um Nachsicht 🙂
 
Also generell ist der Aufbau, den du derzeit hast, nicht ganz so gut.

Statt den ActionListener in eine extra Klasse zu packen kannst du die Methode direkt in der Klasse des Frames haben. Eingebunden wird es dann über z.B. eine Methodenreferenz oder Lambda Expression.

Dann kannst du das Frame direkt mit close Aufruf schließen.

Prinzipiell solltest du auch das Fenster des Elements bekommen können. Du kannst beim ActionEvent Parameter auf source zugreifen. Das ist dann der JButton oder was das Event ausgelöst hat. Da kannst du so lange getParent aufrufen bis du beim JFrame angekommen bist.
 
Alles klar! Versuche ja noch viel. Habe mal gelesen, dass es unübersichtlich werden könnte, wenn man die ActionListener nicht in einer eigenen Klasse packt 🙂.
Wenn ich den ActionListerner in der Klasse habe, sollte es kein Problem sein. Dann kann ich ja einfach mit Fenster.dispose(); das Fenster schließen.
Danke
 
Ich habe noch eine dumme Frage. Hoffe es ist in Ordnung, hier diese Frage reinzuschreiben.

Ich befasse mich auch natürlich mit Theorie hinter einer OOP.
Ich habe mir eine Klasse geschrieben, dort werden die ganzen Berechnungen für mein Spiel verarbeitet. Sprich, die Zufallszahl generieren, Addition, Subtrakion, Modulo und eine Art 3 kreuz 3 Matirx.
Problem! Wenn ich in einer anderen Klasse ein Objekt instanziere und dort die Methode aufrufe, zum Beispiel "Addition", generiert er natürlich wieder eine neue Zufallszahl und meine IF-Abfragen und Schleifen gehen nicht mehr.
Ich habe es jetzt so gelöst, habe die ganzen Methoden, in der Berechnungsklasse, statisch gemacht, und kann so gezielt meine Methoden aufrufen, ohne eine neues Klassenobjekt zu erstellen. Mit getter und setter lese ich die Attribute der Klasse dann aus. Wie Summe, Zufallszahl und den Quotient.

Muss ich den Konstruktor der Klassen vielleicht ändern?
Oder kann man das bei der Instanziierung des Objektes verändern?
Ich denke mir, die ganzen Methoden auf statisch zu haben, ist nicht das sauberste.
 
du hast im prinzip zu viel in eine Verkettung gepackt + deine Methoden auf ein ziel eingestimmt .. wenn du es "universeller" programmierst wirds auch so funktionieren mit mehreren objekten, statisch als lösung bietet sich meistens nicht an

zb addition wird immer funktionieren, auch wenn die zahlen keine zufallszahlen sind 😉
 
Ja genau.
Habe meine Mehtoden immer so in anderen Klassen aufgerufen :

Java:
{
            
            Operationen add = new Operationen();
            add.addieren();
            
        }


Mein Problem war, dass meine Random-Methode auch in dieser Klasse drin war.
Klar, habe die Methode und Klasse so öferts verwendtet und somit immer eine neue Zufallszahl generiert, alleine dass ich ja ein neues Objekt der Klasse angefertig habe.
MIt der statischen Mehtode kann ich ja "gezielt" die Methode in anderen Klassen verwenden, ohne ein neues Klassenobjekt zu erstellen.

Ich gucke nochmal drüber 🙂, es funktioniert. Aber die Methoden auf statisch zu haben, ist mir ein Dorn im Auge.

Die Operations-Klasse habe ich nach meinem Gefühl schon recht allgemein geschrieben 🙂

Danke!
 
Es kann durchaus sinnvoll sein, eine Hilfsklasse mit statischen Funktionen zu schreiben (siehe z.B. java.lang.Math). Wenn deine Klasse "Operationen" heißt, ist sie möglicherweise ein Kandidat dafür.
In der Regel sollte diese Klasse dann aber keine Member haben. Möglicherweise solltest du die Klasse in zwei Klassen aufteilen.
Aber weil wir deine Klasse nicht kennen, können wir nicht wirklich etwas dazu sagen.
 
Ja, vielen Danke 🙂
Ein Problem war, ich habe zweimal die Methode angerufen, einmal um den Rechnenbefehl zu starten und einmal um den Wert der Rechnung im JLabel auszugeben mit der Methode, die einen Rückgabewert hat. Hatte dort noch keine gettter/setter Methode geschrieben. Oh man...

Danke 🙂 sehr nett hier
 

Zurück
Oben