Probleme mit ActionListener

Status
Nicht offen für weitere Antworten.

kulturfenster

Bekanntes Mitglied
Guten Abend,
Ich habe ein kleines Programm geschrieben, dass bei jedem Button-Click eine Zahl durch 10 dividieren soll. Leider funktioniert die Division nur ein einziges Mal. Danach ändert sich der Betrag nicht mehr.
Sieht jemand den Fehler?

Code:
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class tester2
{
	public static void main(String[] args)
	{
		JFrame frame = new JFrame("Divider");
		final double z = 1000;
		JPanel panel = new JPanel();
		final JLabel label = new JLabel("Knete: " + z);
		JButton button = new JButton("Divide");
		
		panel.add(button);
		panel.add(label);
		frame.add(panel);
			
		class Divider implements ActionListener
		{
			public void actionPerformed(ActionEvent event)
			{
				label.setText("Knete: " + (z/10));
			}
		}
		
		ActionListener listener = new Divider();
		
		button.addActionListener(listener);
		
		frame.setSize(200,200);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
du führst immer wieder die gleiche Rechnung durch: 1000/10 = 100,
wenn du eine andere Zahl haben willst, musst du z ändern
 
danke für die rasche Antwort!

Verstehe ich das richtig, dass bei jedem ButtonClick die Variable z neu initialisiert wird?
Was ist denn die Lösung des Problems? eine Methode public void getZ() { return z;} hat nix gebrahct. z ausserhalb der KLasse zu definieren auch nix...
 
Nein, aber bei jedem Klick berechnest du z/1000, was bei dir immer 1000/10 ergibt. Versuchs mal so:
Code:
public void actionPerformed(ActionEvent e) {
 z = z/10;
  label.setText("Knete: " + z);
}
 
ah super, vielen Dank.

Hab das eigentlich zuvor schon ausprobiert, bekam dann aber eine Fehlermeldung, weil z ja noch als final deklariert war ^^
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben