Auf Knopfdruck

Status
Nicht offen für weitere Antworten.

Jackie

Mitglied
Ich habe hier ein Programm gemacht, welches ein Fenster mit zwei Buttons öffnet.
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Fenster  {

public static void main(String[] args) {
	JFrame Fenster = new JFrame("Hallo, wie geht es dir?");
	Fenster.setSize(600, 500);
	Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	JPanel Platte = new JPanel();
	Platte.setLayout(new GridLayout());
	JButton Knopf[] = new JButton[2];
	String Text[] = {"Gut", "Schlecht"};
	String Diagnose[] = {"Das freut mich!", "Das tut mir aber Leid..."};

	for (int i = 0; i < Knopf.length; i++) {
	Knopf[i] = new JButton(Text[i]);	
	Platte.add(Knopf[i]);
	}
	Fenster.setContentPane(Platte);
	Fenster.setVisible(true);	
	}
}

Wenn ich jetzt etwas dazu gebe damit wenn man auf die Buttons klickt sich MessageBoxen öffnen:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Fenster  {

public static void main(String[] args) {
	JFrame Fenster = new JFrame("Hallo, wie geht es dir?");
	Fenster.setSize(600, 500);
	Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	JPanel Platte = new JPanel();
	Platte.setLayout(new GridLayout());
	JButton Knopf[] = new JButton[2];
	String Text[] = {"Gut", "Schlecht"};
	String Diagnose[] = {"Das freut mich!", "Das tut mir aber Leid..."};
	for (int i = 0; i < Knopf.length; i++) {
	Knopf[i] = new JButton(Text[i]);	
	[COLOR="DarkRed"]Knopf[i].addActionListener (new ActionListener() {
		public void actionPerformed (ActionEvent x) {
		JOptionPane.showMessageDialog(null, Diagnose[i]);	
		}
	});[/COLOR]
	Platte.add(Knopf[i]);
	
	}
	Fenster.setContentPane(Platte);
	Fenster.setVisible(true);	
	}
}
Dann kommt beim kompilieren die Fehlermeldung:

Code:
Fenster.java:20: local variable Diagnose is accessed from within inner class; needs to be declared final
		JOptionPane.showMessageDialog(null, Diagnose[i]);	
                                                    ^
Fenster.java:20: local variable i is accessed from within inner class; needs to be declared final
		JOptionPane.showMessageDialog(null, Diagnose[i]);	
                                                             ^
2 errors
 

Jackie

Mitglied
Hab ich. Ich hab jetzt alles falsche geändert, aber es öffnen sich dann alle messageboxen nacheinander.?
 
S

SlaterB

Gast
dieses Verhalten kann ich nicht nachvollziehen, daher auch keine Korrektur angeben,
Tipp: aktuellen Code posten
 

Jackie

Mitglied
hier:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Fenster  {

public static void main(String[] args) {
	JFrame Fenster = new JFrame("Hallo, wie geht es dir?");
	Fenster.setSize(600, 500);
	Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	JPanel Platte = new JPanel();
	Platte.setLayout(new GridLayout());
	JButton Knopf[] = new JButton[2];
	String Text[] = {"Gut", "Schlecht"};
	for (int i = 0; i < Knopf.length; i++) {
	Knopf[i] = new JButton(Text[i]);	
	Knopf[i].addActionListener (new ActionListener() {
	
		public void actionPerformed (ActionEvent x) {
			String Diagnose[] = {"Das freut mich!", "Das tut mir aber Leid..."};	
			for (int i = 0; i < 2; i++) {
		JOptionPane.showMessageDialog(null, Diagnose[i]);	
		
					}
				}
	});
	
	Platte.add(Knopf[i]);
	
	}
	Fenster.setContentPane(Platte);
	Fenster.setVisible(true);	
	}
}
 
S

SlaterB

Gast
du hast also in den ActionListener eine Schleife eingebaut, die mehrere MessageDialoge öffnet,
und nun wunderst du dich, dass sich mehrere MessageDialoge öffnen? ;)

-> entferne die Schleife wieder, ich habe sie dir nicht vorgeschlagen,
mach lieber wieder alles wie am Anfang, du musst nur die Variablen final machen

---------

und ich frage mich immer noch, wie ich das hätte erahnen sollen,
genauso gut könnten 20 Zeilen mehr Code drin sein, die 100 andere Dinge tun,
und dann hättest du auch hier gefragt, wie es dazu kommt..
 
S

SlaterB

Gast
Java:
public class Test {

	public static void main(String argv[]) throws Exception {
		JFrame Fenster = new JFrame("Hallo, wie geht es dir?");
		Fenster.setSize(600, 500);
		Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel Platte = new JPanel();
		Platte.setLayout(new GridLayout());
		JButton Knopf[] = new JButton[2];
		String Text[] = { "Gut", "Schlecht" };
		final String Diagnose[] = { "Das freut mich!", "Das tut mir aber Leid..." };
		for (int i = 0; i < Knopf.length; i++) {
			final int fI = i;
			Knopf[i] = new JButton(Text[i]);
			Knopf[i].addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent x) {
					JOptionPane.showMessageDialog(null, Diagnose[fI]);
				}
			});
			Platte.add(Knopf[i]);

		}
		Fenster.setContentPane(Platte);
		Fenster.setVisible(true);
	}
}

Variablen übrigens unbedingt klein schreiben
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
E Knopfdruck neues Fenster öffnen Java Basics - Anfänger-Themen 5
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
Dechasa Per Knopfdruck Objekte erstellen Java Basics - Anfänger-Themen 4
L Fenster auf Knopfdruck Java Basics - Anfänger-Themen 3
L Methode per Knopfdruck beenden Java Basics - Anfänger-Themen 3
S Simulation auf Knopfdruck Java Basics - Anfänger-Themen 29
S Neues Fenster auf Knopfdruck Java Basics - Anfänger-Themen 12
R Icon auf JLabel nach Knopfdruck ändern Java Basics - Anfänger-Themen 20
D Objekte auf Knopfdruck in Arraylist erzeugen Java Basics - Anfänger-Themen 2
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
B Button Text auf Knopfdruck verändern Java Basics - Anfänger-Themen 3
F Applet: mehrere Listenelemente nach Knopfdruck ausgeben Java Basics - Anfänger-Themen 2
S Linie ausgeben, die sich auf Knopfdruck verlängert Java Basics - Anfänger-Themen 2
C zweites Panel auf Knopfdruck anzeigen Java Basics - Anfänger-Themen 2
S Neues Fenster/Panel nach Knopfdruck Java Basics - Anfänger-Themen 2
A Linie zeichnen per Knopfdruck --> Fehler Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben