Button-Beschriftung bei Mouseklick ändern

  • Themenstarter Themenstarter BennySHS
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

BennySHS

Gast
Hi!

ich habe grade angefangen mich mit Java zu beschäftigen, und hab da gleich die erste Frage an euch 😉

Ich habe ein ganz einfaches Fesnter mit einem Riesen-Button und einem ActionListener:

Hauptklasse:

Code:
import java.awt.*;

public class Haupt extends Frame
{
	public Haupt()
	{		
		Button exitButton = new Button("exit");
		exitButton.setVisible(true);
		MyActionListener myAL = new MyActionListener();
		exitButton.addActionListener(myAL);
		
		add(exitButton);
		setSize(300,300);
		setVisible(true);
		MyWindowListener myWL = new MyWindowListener();
		addWindowListener(myWL);
	}
	
	public static void main(String args[])
	{	
		Haupt window = new Haupt();	
	}	
}
und hier der ActionListener:

Code:
import java.awt.event.*;

public class MyActionListener implements ActionListener {
	
	public void actionPerformed(ActionEvent e)
	{
	    System.out.println("Button gedrückt")
	}
}

Ich würde jetzt gerne bei Klick auf den Button die Beschriftung von "exit" auf "hallo" ändern.
Könnt ihr mir sagen wie das geht ?

Vielen Dank schonmal,
grüße Benny
 
Es gibt 2 Varianten:

1. Du speicherst in deinem ActionListener eine Referenz auf den Button:
Code:
public class Haupt extends Frame
{
   public Haupt()
   {      
      Button exitButton = new Button("exit");
      exitButton.setVisible(true);
      MyActionListener myAL = new MyActionListener();
      exitButton.addActionListener(myAL);
      
      add(exitButton);
      setSize(300,300);
      setVisible(true);
      MyWindowListener myWL = new MyWindowListener( exitButton );
      addWindowListener(myWL);
   }
   
   public static void main(String args[])
   {   
      Haupt window = new Haupt();   
   }   
}
Code:
public class MyActionListener implements ActionListener {
  private Button button;

  public MyActionListener( Button button ){
    this.button = button;
  } 

   public void actionPerformed(ActionEvent e)
   {
       button.setText...
       System.out.println("Button gedrückt")
   }
}



2. Du benutzt das ActionEvent
Code:
   public void actionPerformed(ActionEvent e)
   {
       Button button = (Button)e.getSource();
       button.setText...
       System.out.println("Button gedrückt")
   }
 
Danke für die Anwort!

Ich habe beide Beispiele ausprobiert, kriege jedoch bei beiden die Meldung

"Cannot find class symbol Button" ...
Mit der ich leider nichts anfangen kann.
 
Das bedeutet, dass noch der import des Buttons fehlt.

Schreib noch
"import java.awt.Button;" oder "import java.awt.*;" oben hin (wie schon beim ersten Codestück das du gepostet hast).
 
Ahh! 😉

Alles klar, jetzt klappt das ganze - Vielen Dank!

Dann hätte ich gleich die nächste Frage...
In der Haupt-Klasse lege ich einen 2. button an:

Code:
Button play = new Button("play");
play.setVisible(true);
play.addActionListener(myAL);
add(exitButton);
und in der MyActionListener würde ich dann gerne Prüfen, welcher der beiden Buttons gedrückt wurde.
Ich habe das mal so probiert:

Code:
  if ((Button)e.getSource()==exitButton) button.setLabel("Exit gedrueckt"); 
  if ((Button)e.getSource()==play) button.setLabel("Play gedrueckt");
...das geht natürlich nicht...

Könntet ihr - oder du beni - mir da nochmal weiterhelfen ?

1000 Dank schonmal,
gruß
benny
 
Probiers mal so:

zb. deine Buttons heisen "Exite" und "Start" du machst eine If abfrage.
Also du testest welcher Button gedrückt wurde indem du die Aufschrift die der Button trägt vergleichst.

Code:
String s=e.getActionCommand();
		if(s.equals("Exit"))		
		{

		}
		if(s.equals("Start"))
		{
			
		}
 
Jo das geht wunderbar,vielen Dank!

Is das eine gute Methode, um auf Eingaben zu reagieren, oder wird das normalerweiße anders gelöst??
 
X_Master, könntest du den Code noch so erweitern, das sich bei Knopfdruck die Schrfit auf den Buttons verändert ?

thxalot!
 
Ja kann ich und zwar so:

schreib einfach das in deine actionPerformed


Code:
String s=e.getActionCommand();
if(s.equals("Start"))
{
	start.setLabel("hallo")
}

Das "start" vor set Label steht für deinen Namen des Buttons.
Und das was in den Anführungszeichen hinter set Label steht wird neu in den Button rein geschrieben.
 
Am bestenn vergibst du den Buttons eigene ActionCommands das ist sauberer:
Code:
Button play = new Button("play");
play.setActionCOmmand("cmd_play");
play.setVisible(true);
play.addActionListener(myAL);
add(exitButton);

Code:
String s=e.getActionCommand();
if(s.equals("cmd_play"))
{
   start.setLabel("hallo")
}
Jetzt kannst du auch die Beschriftung der Buttons ändern, ohne die Funktion zu beeinträchtigen.
 
Vielen Dank für eure Antworten!

Wenn ich es so probiere, kriege ich in der Klasse MyActionListener beim kompilieren die Meldung:

"Cannot find symbol variable exitButton"

Was muß ich noch ändern um von der Klasse MyActionListener auf die Buttons in der Klasse Haupt zugreifen zu können??

Danke schonmal,
grüße Benny
 
Benutzt Du den Code von Beni??

Dann muss Du in der Klasse MyActionListener die Variale button und nicht exitButton verwenden, denn der folgende Aufruf:

Code:
MyWindowListener myWL = new MyWindowListener( exitButton );

führt dazu, dass der Konstruktor des Listeners aufgerufen wird:
Code:
  public MyActionListener( Button button ){ 
    this.button = button; // hier wird exitButton aus dem Hauptprog gleich 'button' gesetzt.
  }
 
Hm, ehrlich gesagt raff ich das grad nich so ganz...

Wär vieleiecht jemand so nett, den Code für mich umzuändern das das ganze mal funzt ??
Ich poste mal die beiden Klassen so wie sie im moment bei mir dastehen:

Klasse Haupt
Code:
import java.awt.*;


public class Haupt extends Frame
{
	public Haupt()
	{	
		Button play = new Button("play");
		Button exitButton = new Button("exit");
		
		MyActionListener myAL = new MyActionListener();
		exitButton.addActionListener(myAL);
		play.addActionListener(myAL);
		
		add(exitButton);
		add(play);
		
		setLayout (new GridLayout(8,1,20,3));
		setSize(300,300);
		setVisible(true);
		MyWindowListener myWL = new MyWindowListener();
		addWindowListener(myWL);
		
		
	}
	
	public static void main(String args[])
	{	
		Haupt window = new Haupt();	
	}	
}


Und Klasse MyActionListener
Code:
import java.awt.event.*;
import java.awt.*;

public class MyActionListener implements ActionListener  {
	
		
	public void actionPerformed(ActionEvent e)
	{
       
      String s=e.getActionCommand();
       
      if(s.equals("exit"))       
      { 
			exitButton.setLabel("mongo");
			System.out.println("exit gedrückt");
      } 
      
      if(s.equals("play")) 
      { 
       	   System.out.println("start gedrückt");
      } 
	}
}

Wär super wenn mir das jemand ändern könnte, dann könnt ich endlich mal weiter rumprobieren.. 😉
Thx,
grüße Benny
 
Das Problem liegt darin, dass der in Zeile 14 angesprochene Button nicht da ist!

Versuch doch mal die Zeile 14 durch folgende zu ersetzen:
Code:
((Button)e.getSource()).setLabel("mongo");

Hier also nochmal der komplette Code:
Code:
  public class MyActionListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {

      String s = e.getActionCommand();

      if (s.equals("exit")) {
        if (e.getSource()instanceof Button) {   // Prüfen, ob es sich um einen Button handelt.
          ( (Button) e.getSource()).setLabel("mongo"); // Test auf dem Button ändern
        }
        System.out.println("exit gedrückt");
      }

      if (s.equals("play")) {
        System.out.println("start gedrückt");
      }
    }
  }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben