Java mit ActionListener Variabel ändern.

bcmIT

Cadet 4th Year
Registriert
Sep. 2012
Beiträge
111
Hie Zusammen

Ich lern momentan Java. Dazu mach ich ein Spiel mit 2 JButton welche Zufällig grün werden. Dies Funktioniert super.
Nun möchte ich aber einen Punkte Zähler einbauen. Der wenn man auf einen der Beiden Buttons Klickt sich um 10 erhöht.
Dies wird dann auf einen JLable angezeigt.

Mein Problem nun wenn ich auf den ersten Knopf Klicke werden wie gewünscht 10 Punkte angezeigt. Sobald ich aber auf den 2. Knopf klicke passiert nichts (Score bleibt auf 10.

Dies Liegt wahrscheinlich daran das die Klassenvariabel "score" nicht geändert wird....
Nun wollte ich euch fragen wie ich dieses Problem lösenkann?

Momentan habe ich:
//vbutton1 ist der erste Butten auf welchen ich klicke
//vbutton2 ist der zweite Butten auf welchen ich klicke
//button1 ist das Label auf welchem der Score stehen sollte.

public int score=0; ===> in als Klassen Variabel.
MyActionListener ml1 = new MyActionListener(this,vbutton1,button1, score);
vbutton1.addActionListener(ml1);

MyActionListener ml2 = new MyActionListener(this,vbutton2,button1, score);
vbutton2.addActionListener(ml2);

ActionListener:
Code:
package controller;

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

import javax.swing.JButton;
import javax.swing.JLabel;

import view.Startframe;

public class MyActionListener implements ActionListener{

	Startframe owner;
	JButton button;
	JLabel punkte;
	int score;
	
	
	public MyActionListener(Startframe owner, JButton button, JLabel button1, int score) {
		this.owner = owner;
		this.button = button;
		this.punkte = button1;
		this. score = score;
		}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if (((JButton) e.getSource()).getActionCommand().equals("1")) {
			button.setLocation(5000, 5000);
			button.setVisible(false);
			punkte.setText("Punkte:  "+(owner.Punte10(score)));
			button.repaint();
			}
		

		
		if (((JButton) e.getSource()).getActionCommand().equals("2")) {
			button.setLocation(5000, 5000);
			button.setVisible(false);
			punkte.setText("Punkte:  "+(owner.Punte10(score)));
			button.repaint();}
	}

}

Die Funktion Punkte10
Code:
	public int Punte10(int punke){
		score=punke+10;
		return(score);
	}
 
Hast du schon versucht nach Zeile 40 ein "punkte.repaint();" einzufügen?
 
setze mal in Zeile 16 : "int score;" auf "static int score;".Dann sollte es klappen.
 
Zuletzt bearbeitet:
Jop, Solidnerd hat recht. Momentan hat ja jeder Button einen eigenen Actionlistener mit eigenem score.
Ich fände es besser "score" nicht an den Konstruktor zu übergeben, sondern direkt auf "owner.score" zu arbeiten.
 
Die möglichkeit von newHeilandV2.4 ist sogar noch ein bisschen eleganter.Meine war nur Quick & Dirty.
 
Vielen Dank euch beiden

@Solidnerd das mit dem static hab ich auch schon versucht..vergebens..
@newHeilandV2.4 auch das repaint blieb erfolglos...

Leider Funktioniert es immer noch nicht :(

EDIT:

Habs jetzt anders gelösst
Code:
package controller;

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

import javax.swing.JButton;
import javax.swing.JLabel;

import view.Startframe;

public class MyActionListener implements ActionListener{

	Startframe owner;
	JButton button;
	JLabel punkte;
	static int b;
	int a;
	
	public MyActionListener(Startframe owner, JButton button, JLabel button1, int a) {
		this.owner = owner;
		this.button = button;
		this.punkte = button1;
		this.a=a;
		}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if (((JButton) e.getSource()).getActionCommand().equals("1")) {
			a=b;
			button.setLocation(5000, 5000);
			button.setVisible(false);
			b=b+50;
			punkte.setText("Punkte:  "+b);
			button.repaint();
			}
		
		
		if (((JButton) e.getSource()).getActionCommand().equals("2")) {
			button.setLocation(5000, 5000);
			button.setVisible(false);
			b=b+10;
			punkte.setText("Punkte:  "+b);
			button.repaint();}
	}
	



}
 
Zuletzt bearbeitet:
Es liegt daran das du denn immer noch 0 setzt durch den Konstruktor.Deshalb entferne mal in deinem Konstruktor den int score paramater.

EDIT:
Der int Parameter ,sowie die variable a ist überflüssig.
 
Zuletzt bearbeitet:
Deine Variablen- und Methodenbezeichnungen sind durch die Bank weg unter aller Kanone. Womit lernst du denn? Stand da nirgends, dass man sich sinnvolle Bezeichner ausdenken sollte?

Haufenweise magic numbers, a=b, punkte=button1 und überhaupt - button und button1? Man man man… :freak:
 
hahaha @Tumbleweed doch doch stand da schon ein paar mal..... :P
 
Zurück
Oben