# TextListener bei JTextField



## Brain (10. Mai 2004)

Hallo!!!
Ich habe folgendes Problem: Ich will, dass die Eingabe die im JTextField eingegeben wurde auch in der Konsole bzw. ind der Eingabeaufforderung erscheint, wenn man dann den JButton "OK" angeklickt hat. Das Programm läuft zwar, doch wenn ich auf "OK" drücke, dann tauchen Fehler auf, die ich nicht beheben kann. Könnte mir bitte jemand helfen?
Hier ist der Quellcode, mit dem ich es probiert habe:


```
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

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

public class Versuch extends JFrame implements ActionListener, TextListener {

	public JTextField jTextField;
	public JButton jButton;

	public static void main(String[] args) {
		Versuch fenster = new Versuch("Versuch");

		fenster.pack();
		fenster.setSize(400, 150);
		fenster.setResizable(false);
		fenster.getContentPane().setBackground(Color.WHITE);
		fenster.show();
	}

	Versuch(String titel) {
		super(titel);

		getContentPane().setLayout(null);

		JTextField jTextField = new JTextField("1234567890");
		jTextField.setCaretPosition(5);
		jTextField.addActionListener(this);
		jTextField.setBounds(50, 50, 200, 20);
		getContentPane().add(jTextField);

		JButton jButton = new JButton("OK");
		jButton.addActionListener(this);
		jButton.setBounds(260, 50, 52, 20);
		jButton.setBackground(Color.WHITE);
		getContentPane().add(jButton);

	}

	public TextEvent te;

	public void actionPerformed(ActionEvent ae) {
		String quelle = ae.getActionCommand();
		if (quelle.equals("OK")) {
			JTextField jTextField = (JTextField) te.getSource();
			System.out.println(jTextField.getText());

		}
	}

	public void textValueChanged(TextEvent te) {

		jTextField = (JTextField) te.getSource();
		System.out.println(jTextField.getText());

	}
}
```

Danke für jede Antwort!!!


----------



## P3AC3MAK3R (10. Mai 2004)

Es wäre gut zu wissen, *welche* Fehler konkret auftreten...


----------



## bummerland (10. Mai 2004)

du hast in deiner actionPerformed methode te.getSource() geschrieben. da muss ae.getSource() hin.


----------



## Brain (10. Mai 2004)

Also das "te" mit "ae" vertauschen ging nicht.

Hier sind die Fehler:

java.lang.ClassCastException: javax.swing.JButton
	at Versuch.actionPerformed(Versuch.java:51)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1767)
	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1820)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:258)
	at java.awt.Component.processMouseEvent(Component.java:5021)
	at java.awt.Component.processEvent(Component.java:4818)
	at java.awt.Container.processEvent(Container.java:1525)
	at java.awt.Component.dispatchEventImpl(Component.java:3526)
	at java.awt.Container.dispatchEventImpl(Container.java:1582)
	at java.awt.Component.dispatchEvent(Component.java:3367)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3359)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3074)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3004)
	at java.awt.Container.dispatchEventImpl(Container.java:1568)
	at java.awt.Window.dispatchEventImpl(Window.java:1581)
	at java.awt.Component.dispatchEvent(Component.java:3367)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:445)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:191)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:144)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:130)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:98)


----------



## bummerland (10. Mai 2004)

Brain hat gesagt.:
			
		

> java.lang.ClassCastException: javax.swing.JButton



du versuchst, einen JButton in ein JTextField zu casten. das geht natürlich nicht. die variable jTextField gibts doch bei dir schon, die brauchst du nicht mehr erst casten, die kannst du direkt verwenden.


----------



## Brain (11. Mai 2004)

Ich wieß nicht, was du meinst. Ich habe versucht es auch ohne Button zu machen also nur mit Return. Aber es hat auch nicht funktioniert. Könntest du bitte den fertigen Quellcode schicken? Wäre echt dankbar!!!


----------



## bummerland (11. Mai 2004)

```
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

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

public class Versuch extends JFrame implements ActionListener, TextListener {

   public JTextField jTextField;
   public JButton jButton;

   public static void main(String[] args) {
      Versuch fenster = new Versuch("Versuch");

      fenster.pack();
      fenster.setSize(400, 150);
      fenster.setResizable(false);
      fenster.getContentPane().setBackground(Color.WHITE);
      fenster.show();
   }

   Versuch(String titel) {
      super(titel);

      getContentPane().setLayout(null);

      jTextField = new JTextField("1234567890");
      jTextField.setCaretPosition(5);
      jTextField.addActionListener(this);
      jTextField.setBounds(50, 50, 200, 20);
      getContentPane().add(jTextField);

      JButton jButton = new JButton("OK");
      jButton.addActionListener(this);
      jButton.setBounds(260, 50, 52, 20);
      jButton.setBackground(Color.WHITE);
      getContentPane().add(jButton);

   }

   public TextEvent te;

   public void actionPerformed(ActionEvent ae) {
      String quelle = ae.getActionCommand();
      if (quelle.equals("OK")) {
         System.out.println(jTextField.getText());

      }
   }

   public void textValueChanged(TextEvent te) {

      jTextField = (JTextField) te.getSource();
      System.out.println(jTextField.getText());

   }
}
```

du hattest JTextField jTextField = new JTextField("1234567890"); geschrieben. dadurch wurde nicht die instantzvariable genommen, sondern eine lokale variable, die nur in dieser methode gültig ist, angelegt. deshalb war dein jTextField noch null und es gab eine NullPointerException.


----------

