# Text aus Textfeld per Actionlistener in Label ausgeben.



## holger568 (22. Nov 2007)

Hallo,

Ich möchte, dass bei klick auf Button OK der in das Textfeld geschriebene Text im label1 erscheint. Dies sollte in der Methode actionPerformed passieren, allerdings scheitere ich in der Methode daran den Text vom Textfeld in das label zu übernehmen. Wisst ihr, wass ich genau in die Methode schreiben muss, damit der Text ausgegeben wird?



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



public class Fenster extends JFrame implements ActionListener

{
private static final long serialVersionUID = 1L;


public Fenster()
{
	super ("mein erstes Swing-Fenster");
	super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setLayout (new GridBagLayout());
	
	GridBagConstraints gc = new GridBagConstraints();
	gc.insets = new Insets (5, 5, 5, 5);
	gc.anchor = GridBagConstraints.WEST;
	gc.fill = GridBagConstraints.HORIZONTAL;

	gc.gridx = 0;
	gc.gridy = 0;
	gc.weightx = 0;
	gc.weighty = 1;
	gc.fill = GridBagConstraints.NONE;
	Label label = new Label("Name:");
	add(label, gc);
	
	gc.gridx = 0;
	gc.gridy = 0;
	gc.fill = GridBagConstraints.REMAINDER;
	JTextField textfeld = new JTextField(12);
	add(textfeld, gc);
	
	gc.gridx = 0;
	gc.gridy = 1;
	gc.weightx = 0;
	gc.weighty = 1;
	gc.fill = GridBagConstraints.NONE;
	Label label0 = new Label("Ausgabe:");
	add(label0, gc);
	
	gc.gridx = 0;
	gc.gridy = 1;
	gc.fill = GridBagConstraints.REMAINDER;
	JLabel label1 = new JLabel();
	add(label1, gc);
	
	gc.weightx = 0;
	gc.weighty = 1;
	gc.gridy = 2;
	gc.gridx = 1;
	gc.fill = GridBagConstraints.NONE;
	Button button = new Button("OK");
	add(button, gc);
	button.addActionListener(this);

	super.pack();
}


public void actionPerformed (ActionEvent e)
{
	

}



	
}
```


----------



## Guest (22. Nov 2007)

Die Variablen für das betroffene TextFeld und das Label sind so in deiner actionPerformed-Methode auch nicht bekannt. Die Variablen müssen in deinem Fall als Klassenvariablen (am besten private) angelegt werden, damit du auch in anderen Methoden auf diese zugreifen kannst.


----------



## Guest (22. Nov 2007)

MiniBeispiel:

```
class Test extends JFrame implements ActionListener {
    private JLabel _test;
    
    public Test() {
        // blablabla
        _test = new JLabel();
    
        JButton b = new JButton("OK");
        b.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        _test.setText("neuer Text");
    }
}
```


----------



## Guest (22. Nov 2007)

Ok.

Ich erzeuge also eine private Stringvariable. Wie kann ich allerdings in der Methode dann festlegen, dass der String auf dem Label ausgegeben wird? Das müsste doch so gehen:

String xyz = label1.getText();

Wenn ich das in die methode schreibe, dann erscheint allerdings die fehlermeldung "label1 cannot be resolved"


----------



## Guest (22. Nov 2007)

Anonymous hat gesagt.:
			
		

> Ok.
> 
> Ich erzeuge also eine private Stringvariable. Wie kann ich allerdings in der Methode dann festlegen, dass der String auf dem Label ausgegeben wird? Das müsste doch so gehen:
> 
> ...



1. Das was du da versuchst gibt nicht den String auf dem Label aus, sondern speichert den Labeltext im String
2. Musst du dir keine private Stringvariableanlegen, sondern dein Label als Klassenvariable deklarieren (siehe das Minibeispiel: _test) um in allem Methoden der Klasse darauf zugreifen zu können.


----------



## Guest (22. Nov 2007)

Hab grad nochmal deine Frage genau gelesen und gesehen, dass du ja den Text vom Textfeld auf dem Label anzeigen willst.

Dann brauchst du eh keine Stringvariable dazwischen.  Du musst nur BEIDE Elemente (Textfeld und Label) als Klassenvariablen deklarieren und kannst dann in der Methode drauf zugreifen


```
class .......
    private JTextField _textfeld;
    private JLabel _label;

    public ..... {
        // blablabal
        _textfeld = new JTextField();
        _label = new JLabel();
    }
    
    public void actionPerformed(ActionEvent e) {
        // Hier könntest du ggf. auch noch Sicherheitsabfragen einbauen (z. B. Prüfen ob _label != null oder so)
        _label.setText(_textfeld.getText());
    }
}
```


----------



## Guest (22. Nov 2007)

Danke für die Infos!

Ich habe dies Ausgabe auf dem label soweit hinbekommen.  Das Problem ist nur, dass die Anordnung auf dem Layout nihct schön aussieht:

- Das 1. Textfeld wird von dem Label "Label("Name:")" lnks überdeckt

- Das Ausgabelabel überdeckt mein Label "JLabel("Ausgabe:")" ganz

Ich blicke mit den ganzen gridx, y und weighty , x nicht durch. Wisst ihr welche Werte ich eintragen muss, damit das alles schön geordnet ausgegeben werden kann? 



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



public class Fenster extends JFrame implements ActionListener
{
	private JTextField textfeld; 
	private JLabel label1; 
	
private static final long serialVersionUID = 1L;


public Fenster()
{
	super ("mein erstes Swing-Fenster");
	super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setLayout (new GridBagLayout());
	
	GridBagConstraints gc = new GridBagConstraints();
	gc.insets = new Insets (5, 5, 5, 5);
	gc.anchor = GridBagConstraints.WEST;
	gc.fill = GridBagConstraints.HORIZONTAL;

	gc.gridx = 0;
	gc.gridy = 0;
	gc.weightx = 0;
	gc.weighty = 1;
	gc.fill = GridBagConstraints.NONE;
	Label label = new Label("Name:");
	add(label, gc);
	
	gc.gridx = 0;
	gc.gridy = 0;
	gc.fill = GridBagConstraints.REMAINDER;
	textfeld = new JTextField(12);
	add(textfeld, gc);
	
	gc.gridx = 0;
	gc.gridy = 1;
	gc.weightx = 1;
	gc.weighty = 1;
	gc.fill = GridBagConstraints.NONE;
	JLabel label0 = new JLabel("Ausgabe:");
	add(label0, gc);
	
	gc.gridx = 0;
	gc.gridy = 1;
	gc.fill = GridBagConstraints.REMAINDER;
	label1 = new JLabel(); 
	add(label1, gc);
	
	gc.weightx = 0;
	gc.weighty = 1;
	gc.gridy = 2;
	gc.gridx = 1;
	gc.fill = GridBagConstraints.NONE;
	Button button = new Button("OK");
	add(button, gc);
	button.addActionListener(this);

	super.pack();

}


public void actionPerformed(ActionEvent e)
{
label1.setText(textfeld.getText());

}



	
}
```


----------

