Variablen Variablen in ActionListenern

javaa

Mitglied
Hi Leute, bin grade daran ein Programm zu schrieben und es läuft bisher auch ganz gut, nur häng ich gerade an einer Stelle.
Und zwar möchte ich eine Variable in einem ActionListener definieren, also dass sie quasi bei einem klick auf einen JButton erst definiert wird, und sie dann später mit einem anderen ActionListener auslesen.

Jedoch wird die Variable, wenn ich sie definiere gelb unterkringelt und beim auslesen rot, also als nicht definiert, heißt, dass da irgendwie keine verbindung zwischen beiden besteht. Hat von euch vielleicht jemand eine Ahnung wie sich das Problem lösen lässt?

Hier mal grob skizziert wie der entscheidende Teil des Codes aussieht:

Der erste ActionListener definiert die Variable int zufall, zweite soll sie eigentlich auslesen, klappt aber nicht.
Java:
        public class next implements ActionListener 
	{
					public void actionPerformed(ActionEvent e) {
						int zufall = random.nextInt(frage.fragen[stufe].length);
                                       }										
       }


                         
	public class buttonklick implements ActionListener 
	{
					public void actionPerformed(ActionEvent e) {
		                                System.out.println(zufall);
	}


}
[code=Java]

schonmal danke für jegliche Bemühungen. 
gruß
 
Zuletzt bearbeitet von einem Moderator:

Fab1

Top Contributor
Du solltest die Variable zufall als Instanvariable deklarieren und in der Methode actionPerformed den Wert zuweisen. Außerdem solltest du dafür getter und setter Methoden erstellen. Anschließend kannst du diese von deiner 2. Klasse mit der getter Methode aufrufen.

Da ich doch noch die Zeit hatte hier das was ich gemeint habe. Habs nicht getestet.

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

public class Next implements ActionListener {
	
	private int zufall;
	
	public void actionPerformed(ActionEvent e) {
		zufall = random.nextInt(frage.fragen[stufe].length);
	}

	public int getZufall() {
		return zufall;
	}

	public void setZufall(int zufall) {
		this.zufall = zufall;
	}
}

public class ButtonKlick implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		System.out.println(new Next().getZufall());
	}
}
 
Zuletzt bearbeitet:

Fab1

Top Contributor
Eine Instanzvariable nach dem Klassennamen und vor den Methoden deklariert und ist in der Regel private.

Java:
public class TestKlasse{

private int instanzVariable; // Instanzvariable

public void los(){
// Irgendwas geht los
instanzVariable = 5;
}

}

so ähnlich sollte das aussehen.

Was mir noch aufgefallen ist. Klassennamen sollten Groß im HigherCamelCase und Variable im lowerCamelCase geschrieben werden.
 

javaa

Mitglied
mhm.. hab das jetzt mal so eingetippt, aber es funktioniert leider nicht. ich tippe das private int zufall ein und das andere innerhalb des ActionListeners, aber wieder ist irgendwie keine "Verbindung" da.. das eine wird gelb angezeigt und steht vollkommen unabhängig von der anderen Variable.
 

javaa

Mitglied
Also, das ist mehr so ein generelles Problem:

Ich habe eine ausführende Klasse, die sieht wie folgt aus:

Code:
class Hauptprogramm {

	
	public static void main(String[] args) throws InterruptedException  {

		new Hauptklasse();
	
	}
	
}

Meine "Hauptklasse" sieht dann wie folgt aus.. hier jetzt mal der ganze Code, das gesamte soll später ein Wer wird Reich ( ;) ) Spiel werden.
Java:
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;

public class Hauptklasse extends JFrame {
	
	java.util.Random random = new java.util.Random();
	
	Fragen frage = new Fragen();
	
	private JLabel infolabel;
	private JLabel fragelabel;
	private JButton buttona;
	private JButton buttonb;
	private JButton buttonc;
	private JButton buttond;
	private JButton ffJoker;
	private JButton teleJoker;
	private JButton publiJoker;
	
	private JButton weiter;
	private JButton neu;
	private JButton spielanf;
	
	
	//Vereinfachung zur Überprüfung von Richtig und Falsch
	private int richtig = 49;
	
	
	//Array und int für Gewinn
	private String gewinn [] = {"0", "50", "100", "200", "300", "500", "1000", "2000", "4000", "8000", "16000", "32000", "64000", "125000", "500000", "1 Mio."};
	private int stufe = 0;
	private int check = 0;
	
	
	
	

	
		
	//Erstellen der Grafischen Benutzeroberfläche
	public Hauptklasse() 
	{	
		
		
		//Allgemeines zum Fenster und Layout
		setLayout (null);
		setTitle("Wer wird Reich?");
		setSize(970,650);
		setResizable(false); 
		
		
		//Initialisieren + Einfügen des Textes auf die Joker
		infolabel = new JLabel();
		fragelabel = new JLabel();
		buttona = new JButton ();
		buttonb = new JButton ();
		buttonc = new JButton ();
		buttond = new JButton ();
		ffJoker = new JButton ("50 : 50");
		teleJoker = new JButton ("Telefonjoker");
		publiJoker = new JButton ("Publikumsjoker");
		
		
		
		
		
		weiter = new JButton ("Nächste Frage!");
		neu = new JButton ("Neues Spiel");
		spielanf = new JButton ("Spiel starten");
		
		
		//Layout und Stil
		infolabel.setBounds(30, 150, 722, 70);
		fragelabel.setBounds(30, 250, 722, 70);
		buttona.setBounds(30, 360, 350, 70);
		buttonb.setBounds(400, 360, 350, 70);
		buttonc.setBounds(30, 450, 350, 70);
		buttond.setBounds(400,450, 350, 70);
		ffJoker.setBounds(500, 100, 100, 70);
		teleJoker.setBounds(610, 100, 100, 70);
		publiJoker.setBounds(720, 100, 100, 70);
		
		weiter.setBounds(610, 300, 100, 70);
		neu.setBounds(610, 300, 100, 70);
		spielanf.setBounds(610, 300, 100, 70);
		
		
		/*
		buttona.setBackground(Color.blue);
		buttona.setForeground(Color.blue);
		buttona.setContentAreaFilled(false);
		buttona.setBorder((Border) new BevelBorder(BevelBorder.RAISED));
		*/
		
		
		//Aktionen definieren
		buttona.addActionListener(new buttonklick());
		buttonb.addActionListener(new buttonklick());
		buttonc.addActionListener(new buttonklick());
		buttond.addActionListener(new buttonklick());
		
		ffJoker.addActionListener(new ffjokerklick());
		teleJoker.addActionListener(new telejokerklick());
		publiJoker.addActionListener(new publijokerklick());
		
		
		weiter.addActionListener(new next());
		neu.addActionListener(new next());
		spielanf.addActionListener(new next());
		
		//Hinzufügen der Elemente / Startbildschrim
		
		
		add(neu);
		add(spielanf);
		add(weiter);
		
		add(fragelabel);
		add(buttona);
		add(buttonb);
		add(buttonc);
		add(buttond);
		add(ffJoker);
		add(teleJoker);
		add(publiJoker);
		add(infolabel);
		
		
		weiter.setVisible(false);
		neu.setVisible(false);
		
		fragelabel.setVisible(false);
		buttona.setVisible(false);
		buttonb.setVisible(false);
		buttonc.setVisible(false);
		buttond.setVisible(false);
		ffJoker.setVisible(false);
		teleJoker.setVisible(false);
		publiJoker.setVisible(false);
		

		
		setVisible(true);
		
	}
	
	
	public class buttonklick implements ActionListener 
	{
					//Definition der einzelnen Ereignisse, wenn eine Frage beantwortet wird
					public void actionPerformed(ActionEvent e) {
						buttona.setEnabled(false);
						buttonb.setEnabled(false);
						buttonc.setEnabled(false);
						buttond.setEnabled(false);
						ffJoker.setEnabled(false);
						teleJoker.setEnabled(false);
						publiJoker.setEnabled(false);
					
// Hier werden die Variablen KonA1 - A4 benötigt, aber sie werden als nicht definiert angezeigt. Genaueres Problem steht weiter unten im Quelltext.
						
							if (e.getSource() == buttona && KonA1 == richtig){
								stufe++;
								infolabel.setText("Das war die richtige Antwort! Ihr aktueller Gewinn beträgt " + gewinn[stufe] +" Euro!");
								weiter.setVisible(true);
							}
							else if (e.getSource() == buttonb && KonA2 == richtig){
								stufe++;
								infolabel.setText("Das war die richtige Antwort! Ihr aktueller Gewinn beträgt nun " + gewinn[stufe] +" Euro!");
								// Abwarten
								weiter.setVisible(true);
								
							}
							else if (e.getSource() == buttonc && KonA3 == richtig){
								stufe++;
								infolabel.setText("Das war die richtige Antwort! Ihr aktueller Gewinn beträgt nun " + gewinn[stufe] +" Euro!");
								// Abwarten
								weiter.setVisible(true);
								
							}
							else if (e.getSource() == buttond && KonA4 == richtig){
								stufe++;
								infolabel.setText("Das war die richtige Antwort! Ihr aktueller Gewinn beträgt nun " + gewinn[stufe] +" Euro!");
								// Abwarten
								weiter.setVisible(true);
							}
							else {
								if (stufe > 10)			{check = 10;}
								else if (stufe > 5 )	{check = 5;}
								else 					{check = 0;}
								
								infolabel.setText("Das war leider die falsche Antwort. Sie gehen mit " + gewinn[check] +" Euro nach Hause!");
								stufe = 0;
								neu.setVisible(true);	
							}
							
							
						if (stufe == 15){
							infolabel.setText("Sie haben es geschafft! Sie gewinnen 1 Millionen Euro!!");
							stufe = 0;
							neu.setVisible(true);
								
							}
								
								
					}
					
	}
	
	
	public class next implements ActionListener 
	{
					//Definition der Ereignisse, wenn die Frage beantwortet wurde
					public void actionPerformed(ActionEvent e) {
						weiter.setVisible(false);
						neu.setVisible(false);
						spielanf.setVisible(false);
						
						fragelabel.setVisible(true);
						buttona.setVisible(true);
						buttonb.setVisible(true);
						buttonc.setVisible(true);
						buttond.setVisible(true);
						ffJoker.setVisible(true);
						teleJoker.setVisible(true);
						publiJoker.setVisible(true);
						
						weiter.setVisible(false);
						neu.setVisible(false);
						spielanf.setVisible(false);
						
						fragelabel.setEnabled(true);
						buttona.setEnabled(true);
						buttonb.setEnabled(true);
						buttonc.setEnabled(true);
						buttond.setEnabled(true);
						ffJoker.setEnabled(true);
						teleJoker.setEnabled(true);
						publiJoker.setEnabled(true);
						
						int zufall = random.nextInt(frage.fragen[stufe].length);
					

						fragelabel.setText(frage.fragen [stufe] [zufall]);
						buttona.setText(frage.antworten[stufe] [zufall] [0]);
						buttonb.setText(frage.antworten[stufe] [zufall] [1]);
						buttonc.setText(frage.antworten[stufe] [zufall] [2]);
						buttond.setText(frage.antworten[stufe] [zufall] [3]);
						


// Hier liegt der große Fehler, ich definiere die Variablen KonA1 - A4, das klappt soweit auch wunderbar, doch sobald ich sie beim klick auf den anderen Button (oben bei ActionListener) wieder aufrufen will, funktioniert das nicht, woran kann das denn liegen? 



						int KonA1 = frage.antworten[stufe] [zufall] [0].charAt(0);
						int KonA2 = frage.antworten[stufe] [zufall] [1].charAt(0); 
						int KonA3 = frage.antworten[stufe] [zufall] [2].charAt(0); 
						int KonA4 = frage.antworten[stufe] [zufall] [3].charAt(0); 
						
						
					
}
					
	}					
					
					
				
							  

}

Mein Problem hab ich als Kommentar im Quellcode geschrieben.
ich bin euch dankbar für jede Hilfe, muss das übermorgen haben:/
 

Michael...

Top Contributor
Also, das ist mehr so ein generelles Problem
Ja, das fehlende Verständnis für den Gültigkeitsbereich von Variablen ;-)
Wie weiter oben bereits erwähnt, liegt der Fehler darin, dass die Variablen in der einen Methode deklariert werden, heißt sie gelten auch nur innerhalb dieser Methode. "Erschwerend" kommt noch dazu, dass diese Methode eine Methode einer anonymen inneren Klasse ist.
Die Lösung (wurde ebenfalls bereits genannt) wäre die Variablen "global" in der
Code:
Hauptklasse
zu deklarieren, wie z.B. die Variable
Code:
infoLabel
. Dann könnte man auch überall darauf zu greifen.
 

javaa

Mitglied
boaaaaah, ich danke dir!!! sieht soweit echt gut aus, nur noch ein letztes Problem hab ich, dann ist mein Prgramm perfekt.

Ich möchte, dass ein String aus einem Array ausgelesen wird und auf ein Button projektziert wird (klappt auch wunderbar), einzige Probelm, dass bleibt ist, dass ich immer das erste Zeichen des Strings gelöscht haben möchte. Wie geht das?
Hab nach ewig langem googeln eine Variante mit char und ner for Schleife gefunden.. diese verstehe ich aber leider nicht so ganz.
Wäre cool wenn von euch jemand helfen könnte.
gruß
 

Michael...

Top Contributor
einzige Probelm, dass bleibt ist, dass ich immer das erste Zeichen des Strings gelöscht haben möchte. Wie geht das?
Hab nach ewig langem googeln eine Variante mit char und ner for Schleife gefunden.. diese verstehe ich aber leider nicht so ganz.
Es gibt auch die String Methode substring:
Java:
System.out.println("Hallo".substring(1));
 

javaa

Mitglied
Hahhaah :D nieeemals geglaubt, dass das so einfach geht. Fettes Dankeschön an Alle!!!! ihr seit die besten, Programm läuft!!

:applaus::applaus::applaus::applaus:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Variablen-Werte ändern sich nicht... wieso?? Java Basics - Anfänger-Themen 4
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3
A Variablen aus einer Schleife gezielt auslesen Java Basics - Anfänger-Themen 11
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
K Enigma, variablen übernehmen Java Basics - Anfänger-Themen 6
F Erste Schritte Dynamische Variablen Java Basics - Anfänger-Themen 15
N Variablen zurück casten Java Basics - Anfänger-Themen 3
M Repräsentation von variablen/OOP Java Basics - Anfänger-Themen 2
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben