# auf button klick befehl ausführen



## RaZ0oor (11. Mai 2008)

Hi, ich stehe wieder mal vor einem Problem.
Bis jetzt habe ich gelernt, dass wenn ich auf einen Button klicke, dass ich die Button schrift verändern kann. Wie kann ich machen, dass wenn ich einen Button klicke, etwas ausgeführt, dass einen Text erscheinen lässt. Ich hatte das schon versucht, aber der Text erschien nur, wenn ich die Fenster größe geändert habe.

Ich habe mal men Problem mit kommentaren versehen, was nicht klappt. Wäre cool wenn mir jemand helfen könnte



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

public class Alk extends JFrame {
	JButton mann, frau;
	JTextField getränk, mänge, gewicht, größe, alter;
	JLabel t_getränk,  t_mänge, t_gewicht, t_größe, t_alter, t_alterr, t_leer;
	String funktion;
		
	public static void main(String[] args) {
		Alk fenster = new Alk("Alkoholrechner - Watsonformel");
		fenster.pack();
		fenster.setSize(450,450);
		fenster.setVisible(true);
	}
	
		
	Alk(String titel) {
		super(titel);
			
	
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(9,2,10,10));
		
			
			t_getränk = new JLabel("Alkoholwert in %");
			t_mänge = new JLabel("Mänge des Alkhohols in ml");
			t_gewicht = new JLabel("Gewicht in KG");
			t_alter = new JLabel("Dein Alter");
			t_leer = new JLabel("");
			mann = new JButton("mann");
			frau = new JButton("frau");
			getränk = new JTextField();
			mänge = new JTextField();
			gewicht = new JTextField();
			größe = new JTextField();
			alter = new JTextField();
			
			
						
			panel.add(t_getränk);
			panel.add(getränk);
			panel.add(t_mänge);
			panel.add(mänge);
			panel.add(t_gewicht);
			panel.add(gewicht);
			panel.add(t_alter);
			panel.add(alter);
			panel.add(frau);
			panel.add(mann);
			add(panel);
			
			
			setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
			
			mann.addActionListener(new CMeinActionLauscher());	
			frau.addActionListener(new CMeinActionLauscher());
	}		
	
	
	class CMeinActionLauscher implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			String label;
			label = e.getActionCommand();
			
			if(label.equals("mann")) {
				funktion = "mann";
				//HiER SOLL JETZT ETWAS AUFGERUFEN WERDEN, DASS EIN TEXT ERSCHEINT, ICH BIN EIN MANN
			}
						
			if(label.equals("frau")) {
				funktion = "frau";
//				HiER SOLL JETZT ETWAS AUFGERUFEN WERDEN, DASS EIN TEXT ERSCHEINT, ICH BIN EINE FRAU
			}
							
		}
			
	
	}
	
}
```

lg RaZ0oR


----------



## heart_disease (11. Mai 2008)

Bist du sicher dass 
	
	
	
	





```
e.getActionCommand();
```
 hier der richtige Weg ist? Und wo ist überhaupt der Codepart für die Textausgabe? Oder ich hab die Frage falsch verstanden ...


----------



## RaZ0oR (11. Mai 2008)

heart_disease hat gesagt.:
			
		

> Bist du sicher dass
> 
> 
> 
> ...


Nein bin ich nicht, ich bin ziemlich neu bei Java und in meinem Buch ham die das irgendwann mal benutzt um etwas zu vergleichen. Ich hab den Falschen Code reinkopiert, die Textausgabe ist nicht dabei und in meinen gespeichertn habe ich die Textausgaben auch nicht mehr :-(.
Könnt ihr mir vielleciht helfen, denn Code so abzuändern, dass wenn ich auf einen button klicke, die Textausgabe kommt?


----------



## Guest (11. Mai 2008)

Mal ein Ansatz von mir:


```
class CMeinActionLauscher implements ActionListener {
private String id;

      public CMeinActionLauscher( String id ) {
this.id = id;
}

public void actionPerformed(ActionEvent e) {
        if(this.id.equals("mann")) {
            t_leer.setText( "Ich bin ein Mann" );
         }
                  
         if(this.id.equals("frau")) {
           t_leer.setText( "Ich bin eine Frau" );
         }
                     
      }
   }
```

Aufgerufen sollte das dann so werden:

```
mann.addActionListener( new CMeinActionLauscher("mann") );
frau.addActionListener( new CMeinActionLauscher("frau") );
```

So wirklich sauber ist allerdings auch diese Lösung nicht, aber für den Anfang reichts ja


----------



## RaZ0oR (11. Mai 2008)

Anonymous hat gesagt.:
			
		

> Mal ein Ansatz von mir:
> 
> 
> ```
> ...



Ok, dankeschön.
das einzigste was ich nicht verstehe ist dieses "this". Wie gesagt ich bin neu in Java. Könnte mir einer erklären was das "this" bewirkt?

EDIT: OK kapiert

Edit2: MEin fehler, später muss statt ich bin ein mann/frau der wert von einer Rechnung hin, z.B: 5+5 muss statt dem satz hin
wie kann ihc den das verwirklichen?

Edit3:
Ich beschreibe mein Problem mal genauer, wenn man auf den button mann klickt, soll eine Formel ausgerechnet werden und im Programm erscheinen, das selbe auch bei frau, nur mit einer andren Formel. Nur ich verstehe nicht ganz wie ich das ganze dazu bringe, dass das am ende auch im Programm erscheint


----------



## Escorter (12. Mai 2008)

```
JButton mann = new JButton("Mann");
    	mann.setActionCommand("test");
    	System.out.println("AC 1: " + mann.getActionCommand());
    	mann.setText("Frau");
    	System.out.println("AC 2: " + mann.getActionCommand());
```

So wie ich das verstanden habe ändert sich nur der Text des Buttons. Bei Buttons ist es so, dass wenn nicht explizit eine ActionCommand gesetzt wurde der TExt der ActionCommand ist. Änderst du aber den ActionCommand, dann bleibt dieser auch nach der Textänderung aktiv. Mit dem Codeschnipsel oben hab ichs getestet und der ActionCommand war beidesmal "test".

Ist das, das wo nach du gesucht hast?

Gruß,
Esco


----------



## heart_disease (12. Mai 2008)

Kleine Anmerkung: Umlaute und Sonderzeichen wie 'ß' sind beim Programmieren eine Todsünde!

EDIT: So, das hier wäre einigermaßen sauber gelöst. Diese Watsonformel musst du selbst noch implementieren, die kenne ich nicht. Für diese Angelegenheit gibts jetzt die Methode *public void detectConclusion( boolean male )*.
(Wenn du den Code so übernimmst, musst du unbedingt den Dateinamen auf AlkTest.java ändern!)


```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
	
public class AlkTest extends JFrame {
	private JButton mann, frau;
	private JTextField getraenk, maenge, gewicht, groesse, alter;
	private JLabel t_getraenk,  t_maenge, t_gewicht, t_groesse, t_alter, t_alterr, t_leer;
	private String funktion;
		
	public static void main(String[] args) {
		// Init System Look&Feel
		try {
			UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
		} catch ( Exception e ) {
			System.err.println( "Can't set Look&Feel!" );
		}
		
		AlkTest fenster = new AlkTest( "Alkoholrechner - Watsonformel" );
		fenster.init();
	}
	
	public AlkTest( String titel ) {
		super( titel );
		
		this.setLayout( new GridLayout(9, 2, 10, 10) );
		
		this.t_getraenk = new JLabel("Alkoholwert in %");
		this.t_maenge = new JLabel("Maenge des Alkhohols in ml");
		this.t_gewicht = new JLabel("Gewicht in KG");
		this.t_alter = new JLabel("Dein Alter");
		this.t_leer = new JLabel("");
		this.mann = new JButton("mann");
		this.frau = new JButton("frau");
		this.getraenk = new JTextField();
		this.maenge = new JTextField();
		this.gewicht = new JTextField();
		this.groesse = new JTextField();
		this.alter = new JTextField();
			
		this.mann.addActionListener( new CMeinActionLauscher(true) );	
		this.frau.addActionListener( new CMeinActionLauscher(false) );
		
		this.getContentPane().add(t_getraenk);
		this.getContentPane().add(getraenk);
		this.getContentPane().add(t_maenge);
		this.getContentPane().add(maenge);
		this.getContentPane().add(t_gewicht);
		this.getContentPane().add(gewicht);
		this.getContentPane().add(t_alter);
		this.getContentPane().add(alter);
		this.getContentPane().add(frau);
		this.getContentPane().add(mann);
	}
	
	public void init() {
		//this.pack();
		this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		this.setSize( 450, 450 );
		this.setVisible( true );
	}
	
	/**
	 * In dieser Methode wird das Ergebnis rechnerisch ermittelt und
	 * ausgeben (zB ueber JOptionPane). Um mit den eingegeben Werten
	 * aus den Textfeldern rechnen zu koennen, muessen die Werte erst mit
	 * Double.parseDouble(String s) bzw. Integer.parseInt(String s) konvertiert werden.
	*/
	public void detectConclusion( boolean male ) {
		String ergebnis = ( male ) ? "Sie sind ein Mann" : "Sie sind eine Frau";
		
		JOptionPane.showMessageDialog( null, ergebnis, "Ergebnis", JOptionPane.INFORMATION_MESSAGE );
	}
	
	private class CMeinActionLauscher implements ActionListener {
		private boolean isMale;
		
		public CMeinActionLauscher( boolean male ) {
			this.isMale = male;
		}
		
		public void actionPerformed( ActionEvent e ) {
			detectConclusion( this.isMale );
		}
	
	}
}
```


----------



## Leroy42 (12. Mai 2008)

heart_disease hat gesagt.:
			
		

> Kleine Anmerkung: Umlaute und Sonderzeichen wie 'ß' sind beim Programmieren eine Todsünde!



In welchem Jahrhundert lebst du denn?  :shock:


----------



## heart_disease (12. Mai 2008)

Natürlich geht's, aber der Compiler meckert bei solchen Zeichen. Und ein Amerikaner wird zB keine allzu große Freude an Quelltexten mit Umlauten haben 
Außerdem kommt's immer wieder zu Troubles mit der Zeichencodierung (UTF-8 vs. ISO-Normen)


----------



## Leroy42 (13. Mai 2008)

heart_disease hat gesagt.:
			
		

> Natürlich geht's, aber der Compiler meckert bei solchen Zeichen.



 :shock: Unsinn! Der Compiler verarbeitet Unicode-Zeichen!

Höchstens das Betriebssystem macht Schwierigkeiten bei Verwendung von
Umlauten in Klassen- und Interface-Namen.



			
				heart_disease hat gesagt.:
			
		

> Und ein Amerikaner wird zB keine allzu große Freude an Quelltexten mit Umlauten haben



Was ist das denn für ein Grund? Ein Ägypter oder Chinese könnte auch
Schwierigkeiten mit lateinischen Buchstaben haben und dennoch entwickeln
die auch Software.


----------



## SlaterB (13. Mai 2008)

> Was ist das denn für ein Grund?

Standardisierung ist ein wichtiges Konzept, Programmierer aus 20 Längern kommen mit 18 der 20 Sprachen nicht zurecht,
nur mit ihrer eigenen und englisch,

klar mag nicht jeder englisch ganz leicht verstehen,
aber wieso ist das jetzt ein Grund dafür, dass deutsche Umlaute ok sind?
damit wird ein Chinese noch weniger klar kommen und allen anderen auch nicht und ein heilloses Durcheinander entsteht


----------



## Leroy42 (13. Mai 2008)

Ich vermeide auch deutsche Umlaute, sogar in Variablennamen
obwohl dies unnötig ist.

Aber eben aus Gründen der Standardisierung und nicht
weil _der Compiler meckert_ oder ein Amerikaner damit
Schwierigkeiten hätte.


----------

