# Button Text per Mausclick ändern



## danaldo (9. Jan 2005)

Ich würde gerne per Mausclick die Beschriftung meines Buttons ändern. Ich habe folgenden Code:


```
button1.setActionCommand("Go");
button1.addActionListener(this);
button1.setFont(new Font("Arial", Font.BOLD, 12));
button1.setText("Go");


public void actionPerformed(ActionEvent event) {

if (event.getActionCommand().equals("Go")) {

	if (button1.getText().equals(" Go ")){

	//button1.setEnabled(false);
	button1.setText("Abbrechen");
	}

	if (button1.getText().equals("Abbrechen")){

	button1.setText("Go");
	}
}
}
```

Das Problem ist, dass ich zwar per Mausclick den Button auf setEnabled(false) setzen kann, allerdings die Beschriftung nicht auf  "Abbrechen" setzen kann. Liegt das vielleicht daran, dass ich eine andere Event-Verarbeitung benötige oder brauche ich eine komplett andere Methode zum Ändern der Beschriftung des Buttons?

Vielen Dank!


----------



## Kerberus (9. Jan 2005)

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JFrame implements ActionListener {
 JButton one;
 
 public Test() {
  this.setSize(200,50);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  this.getContentPane().add(one = new JButton("GO"));
  one.addActionListener(this);
 }

 public void actionPerformed(ActionEvent evt) {
  Object src = evt.getSource();

  if(src == one && one.getText().equals("GO")) {
   one.setText("Abbrechen");
   one.repaint();
  } else if(src == one && one.getText().equals("Abbrechen")) {
   one.setText("GO");
   one.repaint();
  }

 }

 public static void main(String[] args) {
  Test t = new Test();
  t.setVisible(true);
 }
}
```

Habe dir mal schnell was geschrieben...
Wenn du feststellen möchtest von wem das Event kommt, würde ich über .getSource() gehen...
Versuch allerdings bei deinem Code mal ein button1.repaint() einzubauen, nachdem du den Text mit .setText() verändert hast. Könnte helfen


----------



## Beni (9. Jan 2005)

Was passiert, wenn der button1 den Text Go hat?

```
if (button1.getText().equals(" Go ")){   // << dieses if wird angesprochen
   button1.setText("Abbrechen");          // << der Text wird auf "Abbrechen" geändert
}

if (button1.getText().equals("Abbrechen")){  // << dieses if wird auch angesprochen, denn nun ist der Text bereits verändert
   button1.setText("Go");  // <<  Der Text wird wieder zurück nach "go" geändert.
}
```

 :arrow: du musst in deinem Code noch ein "else" geschickt platzieren  :wink: 
P.s. " Go " und "Go" ist nicht dasselbe, der erste Text hat 4, der zweite 2 Zeichen. Deine 1. If-Bedingung wird nur ein einziges mal ansprechen.


----------



## danaldo (9. Jan 2005)

Vielen Dank für die Hilfe!

Beni hatte recht! Das Problem lag bei den beiden If-Anweisungen.  Die Beschriftung wurde geändert  und  dann gleich wieder geändert. Habe ein *else* eingebaut und alles funkt wunderbar.

Besten Dank!


```
if (button1.getText().equals("Go")){   
   button1.setText("Abbrechen"); 
}

else if (button1.getText().equals("Abbrechen")){ 
   button1.setText("Go"); 
}
```


----------

