Im ActionListener eine "äußere" Variable verändern

Gmork

Mitglied
Guten Abend,
ich habe eine Klasse mit einem ActionListener. Dessen Methode actionPerformed soll einen Boolean der äußeren Klasse auf true setzen. Wie ist das möglich bzw ist das möglich?
(Ich möchte eher ungern eine Textausgabe dafür nutzen.)

Hoffe mir kann jemand helfen,
MfG Gmork
 

Robat

Top Contributor
In deiner Klasse mit dem boolschen Wert, erstellst du einen Setter für für die Variable. Deinem ActionListener übergibst du im Konstruktor die Klasse, mit dem boolschen Wert.
Über die Instanze dieser Klasse kannst du dann den Setter aufrufen

Java:
public class bla{

private boolean isGameRunning;

public static void main(String args[])
{
btn.addActionListener(new MyActionListener(this);
}

public void setIsGameRunning(boolean isGameRunning){this.isGameRunning =     isGameRunning;}

}
-----
public clsss MyActionListener implements ActionListener{
private Bla bla;

public MyActionListener(Bla bla)
{
    this.bla = bla;
}

private void actionPerferomed(ActionEvent e)
{
     ...
     bla.setIsGameRunning(false);
}

[/code

Gruß
Robert
 

Jardcore

Top Contributor
Habe den Code von Robat ein wenig aufgeräumt:
Java:
public class Game {
    private boolean isRunning;
    //...

    public static void main(String args[]) {
        pauseButton.addActionListener(new PauseActionListener(this);
    }

    public void setIsRunning(boolean isRunning) {
        this.isRunning = isRunning;
    }
}
Java:
public class PauseActionListener implements ActionListener {
    private final Game game;

    public PauseActionListener(final Game game) {
        this.game = game;
    }

    private void actionPerferomed(ActionEvent e) {
        game.setIsRunning(false);
    }
}
 

Gmork

Mitglied
Danke euch beiden!
Genau nach so einer Lösung habe ich gesucht. :D

[Edit]
Funktioniert leider nicht wirklich. :/ Jedenfalls nicht bei meinem aktuellen Beispiel dazu:
Java:
public class Window {

   private JFrame frame;
   private JButton btn;
   private boolean bool = false;

   public static void main(String[] args) {
     new Window();
   }

   public Window() {
     frame = new JFrame();
     frame.setBounds(100, 100, 450, 300);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     btn = new JButton("Button");
     frame.getContentPane().add(btn, BorderLayout.CENTER);
     btn.addActionListener(new BooleanActionListener(this));
     frame.setVisible(true);
    
     while(true) {
       if(bool) btn.setText("Geklickt");
     }
   }

   public void setBoolean(boolean bool) {
     this.bool = bool;
   }
}
Java:
public class BooleanActionListener implements ActionListener {
   private final Window window;

   public BooleanActionListener(final Window window) {
     this.window = window;
   }

   @Override
   public void actionPerformed(ActionEvent e) {
     window.setBoolean(true);
   }
}
Ich sehe allerdings auch keinen Unterschied zur vorgeschlagenen Lösung?
 
Zuletzt bearbeitet:

Gmork

Mitglied
Kann leider nicht mehr editieren, aber um es noch hinzuzufügen:
Prinzipiell klappt der Code. Er scheint aber nicht das Problem zu lösen, da man
weiterhin eine Textausgabe mit dem Boolean braucht, damit er im
folgenden korrekt ausgelesen werden kann.
 

Gmork

Mitglied
Aktuell klappt das kleine Programm nicht.
Was passieren sollte: Klickt man auf den Button, so wird auf diesem der Text "Geklickt" angezeigt.
(Ich weiß, dass ich diesen auch direkt auf den Button schreiben kann, aber es geht mir hier um das Weiterverarbeiten der "Klick"-Information in einer anderen Klasse. Das ist lediglich ein vereinfachtes Beispiel dafür.)
Ich bin mir nicht sicher wieso, aber, wenn ich vor diese Zeile:
Java:
if(bool) btn.setText("Geklickt");
folgende Zeile schreibe:
Java:
System.out.println(bool);
, so klappt das Programm. Ohne diese Zeile klappt es eben nicht.

Anscheinend wird dadurch irgendetwas aktualisiert? Jedenfalls würde ich diese Konsolenausgabe lieber weglassen, wenn das irgendwie möglich ist.
(Wenn ich die Konsolenausgabe nutze, so könnte ich sogar den Window-Parameter weglassen und stattdessen nur
Java:
setBoolean(true);
in der Methode actionPerformed schreiben. Auch da bin ich mir nicht sicher, wieso das geht bzw teilweise geht. (Teilwese deswegen, da man hier natürlich ebenfalls die Konsolenausgabe benötigt.))
 
Zuletzt bearbeitet:

Robat

Top Contributor
Du willst doch, dass der Text geändert wird wenn man auf den Button drückt, also muss dein:

Java:
btn.setText("...");

auch in deine actionPerformed Methode
 

Jardcore

Top Contributor
Also erstmal ein while(true) macht man nicht. :p
Das was du willst kann man auf unterschiedliche weise lösen.
Der Ansatz von @Robat sollte so funktionieren:
Java:
public class Window {
   private JFrame frame;
   private JButton btn;
   private boolean bool = false;

   public static void main(String[] args) {
     new Window();
   }

   public Window() {
     frame = new JFrame();
     frame.setBounds(100, 100, 450, 300);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     btn = new JButton("Button");
     frame.getContentPane().add(btn, BorderLayout.CENTER);
     btn.addActionListener(new BooleanActionListener(this));
     frame.setVisible(true);
   }

   public void setGeklicktAsButtonText() {
     btn.setText("Geklickt");
   }
}
Java:
public class BooleanActionListener implements ActionListener {
   private final Window window;

   public BooleanActionListener(final Window window) {
     this.window = window;
   }

   @Override
   public void actionPerformed(ActionEvent e) {
     window.setGeklicktAsButtonText();
   }
}

Ein andere Ansatz wäre den Button an den Listener zu übergeben:
Java:
public class Window {
   private JFrame frame;
   private JButton btn;
   private boolean bool = false;

   public static void main(String[] args) {
     new Window();
   }

   public Window() {
     frame = new JFrame();
     frame.setBounds(100, 100, 450, 300);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     btn = new JButton("Button");
     frame.getContentPane().add(btn, BorderLayout.CENTER);
     btn.addActionListener(new BooleanActionListener(btn));
     frame.setVisible(true);
   }
}
Java:
public class BooleanActionListener implements ActionListener {
   private final JButton button;

   public BooleanActionListener(final JButton button) {
     this.button = button;
   }

   @Override
   public void actionPerformed(ActionEvent e) {
     button.setText("Geklickt");
   }
}
 

Robat

Top Contributor
Ein andere Ansatz wäre den Button an den Listener zu übergeben:

Kannst du dir nicht den Button auch über

Java:
public class BooleanActionListener implements ActionListener {
   @Override
   publicvoid actionPerformed(ActionEvent e){
      JButton btn = (JButton) e.getSource();
      btn.setText("Geklickt");
   }
}

holen? In dem Beispiel geht man natürlich davon aus, dass es nur einen Button gibt.
Das kann man natürlich auch mit einer if-else / switch-case abfangen, wenn man das will.

Weiß nicht, welcher Weg in dem Moment am sinnigsten wäre
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
E ActionListener Java Basics - Anfänger-Themen 4
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
J Array Actionlistener Java Basics - Anfänger-Themen 9
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
P Erste Schritte ActionListener Java Basics - Anfänger-Themen 2
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb ActionListener Java Basics - Anfänger-Themen 1
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
F ActionListener mit Files etc Java Basics - Anfänger-Themen 12
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
CptK Auf ActionListener von anderer Klass aus zugreifen Java Basics - Anfänger-Themen 5
F Mehrere Buttons mit einem ActionListener abdecken Java Basics - Anfänger-Themen 24
U ActionListener mit JMenuItems verknüpfen Java Basics - Anfänger-Themen 1
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
L Problem bei Java-ActionListener Java Basics - Anfänger-Themen 4
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
JavaNewbie2.0 ActionListener Java Basics - Anfänger-Themen 11
Voreck Actionlistener problem Java Basics - Anfänger-Themen 1
T Fehler beim ActionListener Java Basics - Anfänger-Themen 2
M public static int in ActionListener Java Basics - Anfänger-Themen 6
S actionlistener timer Java Basics - Anfänger-Themen 9
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
P aus ActionListener auf HauptFrame zugreifen Java Basics - Anfänger-Themen 4
A Klassen Bool Actionlistener Java Basics - Anfänger-Themen 2
K Methoden ActionListener wird übersprungen Java Basics - Anfänger-Themen 3
S actionlistener Java Basics - Anfänger-Themen 29
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
J ActionListener Java Basics - Anfänger-Themen 5
A ActionListener Java Basics - Anfänger-Themen 9
R Problem mit ActionListener für Buttons Java Basics - Anfänger-Themen 5
Z ActionListener wird nicht erkannt? Java Basics - Anfänger-Themen 5
T ActionListener Source vergleichen Java Basics - Anfänger-Themen 8
T Frage zum ActionListener Java Basics - Anfänger-Themen 5
R ActionListener mit for Schleife füllen. Java Basics - Anfänger-Themen 4
K Button's mit versch. Aufgaben/ActionListener Java Basics - Anfänger-Themen 12
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
I ActionListener reagiert nicht Java Basics - Anfänger-Themen 6
N Probleme mit ActionListener und Logischer Abfrage Java Basics - Anfänger-Themen 4
D Erste Schritte Buttons mit actionlistener Problem Java Basics - Anfänger-Themen 3
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S ActionListener, Methoden und Variablen Java Basics - Anfänger-Themen 4
X Variablen Actionlistener | Variablen-namen Java Basics - Anfänger-Themen 5
G ActionListener implementieren Java Basics - Anfänger-Themen 12
T Erste Schritte Berechnete Variable im ActionListener zurückführen Java Basics - Anfänger-Themen 6
D Panel sichtbar/unsichtbar machen im ActionListener Java Basics - Anfänger-Themen 3
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
M Button , actionlistener Java Basics - Anfänger-Themen 11
P Erste Schritte JTable mit Daten aus Acces DB füllen und Actionlistener einsetzen Java Basics - Anfänger-Themen 29
M Actionlistener Java Basics - Anfänger-Themen 9
D Problem mit ausgelagertem Actionlistener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
M Klassen Durch den ActionListener das GUI einer anderen Klasse verändern Java Basics - Anfänger-Themen 8
T NullPointerException im ActionListener Java Basics - Anfänger-Themen 3
C Erste Schritte GUI - ActionListener - Exception Nullpointer Java Basics - Anfänger-Themen 5
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E JMenu ActionListener reagiert nicht? Java Basics - Anfänger-Themen 6
V ActionListener in einer for-Schleife Java Basics - Anfänger-Themen 2
S Erste Schritte ActionListener auf Buttons einrichten Java Basics - Anfänger-Themen 3
M Variablen Variable lässt sich durch ActionListener nicht ändern Java Basics - Anfänger-Themen 5
P ActionListener Action Event Java Basics - Anfänger-Themen 5
L ActionListener zerschießt AnchorLayout Java Basics - Anfänger-Themen 8
D ActionListener braucht zwei Klicks auf Button??? Java Basics - Anfänger-Themen 2
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
Y Actionlistener passt nicht zu Dataset Java Basics - Anfänger-Themen 6
W Problem mit FileWriter / ActionListener Java Basics - Anfänger-Themen 6
F actionListener Java Basics - Anfänger-Themen 3
T ActionListener auslagern Java Basics - Anfänger-Themen 14
S Actionlistener funktionieren nicht in der .jar Java Basics - Anfänger-Themen 9
E ActionListener abwarten lassen? Java Basics - Anfänger-Themen 11
E ActionListener in anderer Klasse erkennen Java Basics - Anfänger-Themen 13
H ActionListener Verbesserung möglich? (This) Java Basics - Anfänger-Themen 3
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
V ActionListener bei vielen Modulen Java Basics - Anfänger-Themen 3
J ActionListener Java Basics - Anfänger-Themen 2
T JLabel durch ActionListener ändern Java Basics - Anfänger-Themen 4
S ActionListener Java Basics - Anfänger-Themen 4
K Actionlistener Java Basics - Anfänger-Themen 7
M ActionListener außerhalb des EDT ausführen Java Basics - Anfänger-Themen 2
A ActionListener im JMenu - Problem Java Basics - Anfänger-Themen 2
M ActionListener reagiert nicht Java Basics - Anfänger-Themen 4
N ActionListener + GUI Java Basics - Anfänger-Themen 8
H Bewegtes Bild im ActionListener [Problem] Java Basics - Anfänger-Themen 12
D Liste+ActionListener Java Basics - Anfänger-Themen 6
L wie Jframe an ActionListener übergeben Java Basics - Anfänger-Themen 4
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
Luk10 Problem mit ActionListener Java Basics - Anfänger-Themen 6
R Viereck zeichnen über TextField-Eingabe /ActionListener Java Basics - Anfänger-Themen 9
C ActionListener problem beim starten von programmen Java Basics - Anfänger-Themen 3
C ActionListener problem Java Basics - Anfänger-Themen 4
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben