[Erledigt] Problemen mit ActionListener

In meinem Beispiel werden 2 Events ausgeführt. Es sollte aber nur der Event ausgelöst werden, auf den ich klicke. Ich habe das mit If abgefangen und verstehe nicht was ich falsch gemacht habe.

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

import javax.swing.JButton;
import javax.swing.JFrame;


public class SwingsButtons extends JFrame{

	private JButton button1, button2;
	
	public SwingsButtons() {
		super("Meine Buttons");
		setLayout(null);
		setSize(300, 100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button1 = new JButton("OK");
		button2 = new JButton("Calcel");
		button1.setSize(100, 20);
		button2.setSize(100, 20);
		button1.setLocation(10, 20);
		button2.setLocation(120, 20);
		add(button1);
		add(button2);
		//Listener
		button1.addActionListener(new PressButton());
		button2.addActionListener(new PressButton());
	}
	
	
	public class PressButton implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			
			System.out.println(e.getActionCommand());
			if(e.getActionCommand() == button1.getText());
			{
				button1.setText("Danke");
			}
			if(e.getActionCommand() == button2.getText());
			{
				button2.setText("Danke2");
			}
		}
	}
	
	public static void main(String[] args) {
		new SwingsButtons().setVisible(true);

	}

}
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class SwingsButtons extends JFrame{

private JButton button1;
private JButton button2;

	public SwingsButtons() {
		
		super("Meine Buttons");
		setLayout(null);
		setSize(300, 100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button1 = new JButton("OK");
		button2 = new JButton("Calcel");
		button1.setSize(100, 20);
		button2.setSize(100, 20);
		button1.setLocation(10, 20);
		button2.setLocation(120, 20);
		add(button1);
		add(button2);
		button1.setActionCommand(button1.getText());
		button2.setActionCommand(button2.getText());
		//	Listener
		button1.addActionListener(new PressButton());
		button2.addActionListener(new PressButton());
	}



	public class PressButton implements ActionListener{

		public void actionPerformed(ActionEvent e) {

			if(e.getActionCommand().equals(button1.getText()))
			{
				button1.setText("Danke");
			}
			if(e.getActionCommand().equals(button2.getText()))
			{
				button2.setText("Danke2");
			}
		}
	}

	public static void main(String[] args) {

		new SwingsButtons().setVisible(true);
	}
}```

Danke bullz. Für die anderen: der Fehler liegt in den ;. Ich habe bei IF abfrage ; hingeschrieben :o :o :o

Ich würde noch statt “button.getText” die Methode “button.getActionCommand” empfehlen. Denn der Text muss nicht gleich dem ActionCommand sein.

mhm - ausserdem soll man IMMER Strings per equals vergleichen da sie Objekte sind… == geht in manchen bestimmten faellen, aber ist in der hinsicht zu riskant.

ist der per default eigentlich schon gesetzt ? wenn nicht muss man ihn natuerlich noch fuer den Button setzen…

Per Default ist der dasselbe wie der Text, aber wer garantiert schon, dass immer alles schön auf default ist? :wink:

Oder wenn sowieso gleich jeder Button anders behandelt werden soll mit

e.getSource() == button1

Oder wenns ganz professionell sein soll: implementier ein paar Actions (siehe “AbstractAction” in “javax.swing”).

und mit kanonen auf spatzen schiessen … (professionell ist nicht immer gleichbedeutend mit gut :stuck_out_tongue: )

bei komplexeren Actions sehe ich das noch ein, wenn es darum geht ein fenster zu schliessen oder einfach eine simple ausgabe erscheinen zu lassen faende ich das ein wenig uebertrieben