Textfield auslesen auf Anforderung

R

roland_2345

Gast
Hallo Forum,

irgendwie steh ich seit gestern auf dem Schlauch.
Ich habe eine Klasse, die stellt mir ein Fenster dar mit einem Textfield, in dem der Benutzer eine Eingabe machen soll.
Die Eingabe wird abgeprüft, wenn sie fehlerhaft ist, dann gibt es einen Hinweis und die Eingabe muss wiederholt werden.
Funktioniert soweit.
Mein Problem ist nun: Ich will aus einer anderen Klasse eine Methode aufrufen, die mir genau eine korrekte Eingabe zurückliefert. Wie schreibe ich die am besten ?
Die Methode soll so aussehen:
public String Get_gueltigen_wert()
Erst in der Methode soll die Kontrolle an die Klasse gegeben werden und erst dann sollten Eingaben gemacht werden
Hat jemand eine Idee, die mir hier weiterhilft ?

Vielen Dank

Roland

Java:
import java.awt.*;                // das Paket awt wird sichtbar gemacht
import java.awt.event.*;          // Ereignisbehandlung

public class eingabetest 
	extends Frame 	{

       private TextField eingabe;
	private Label     ausgabe;

	public eingabetest() {	           		//Konstruktor
		super("Bitte geben Sie die Zahlen ein ");              //Den Titel festlegen
		Panel myContainer = new Panel();		//spezieller Container
		myContainer.setLayout(new BorderLayout(20,20));		//Layout einsetzen
		myContainer.setBackground(Color.lightGray);

	    eingabe = new TextField();
	    ausgabe = new Label();
		
	    setFont(new Font("sanserif", Font.BOLD, 20));
		
        myContainer.add(ausgabe,BorderLayout.CENTER);
        myContainer.add(eingabe,BorderLayout.SOUTH );
        
        eingabe.addActionListener(
        	      new ActionListener() {
        	        public void actionPerformed( ActionEvent ev ) {
        	          uebernehme_eingabe(); } } );

        addWindowListener(
        	      new WindowAdapter() {
        	        public void windowClosing( WindowEvent ev ) {
        	          dispose();
        	          System.exit( 0 ); } } );

		this.add(myContainer);				//Container dem Fenster hinzufuegen

		setLocation (600, 10);
		setSize(400, 200);
        setVisible(true);
	}
	
	void uebernehme_eingabe()
	{   
		// hier prüfe ich die Eingabe, wenn sie nicht stimmt, lasse ich wieder 
		// eingeben, wenn sie stimmt, nehme ich sie in ein internes Feld auf
		// fuer das Beispiel hier zeige ich sie einfach an
            	ausgabe.setText( "Eingabe war: " + eingabe.getText() );
            	eingabe.setText("");
 	}

	public static void main(String[] arg) {		//Das Hauptprogramm
		eingabetest myWin = new eingabetest();
  	}
}
 
S

SlaterB

Gast
bisher hast du doch noch gar keine separate Klasse und entsprechende Methode, oder?
wo genau liegt das Problem, ist nicht vollkommen klar was in dieser Methode stehen muss?

> und erst dann sollten Eingaben gemacht werden
klingt verdächtig falsch, die GUI läuft für sich falls sie mal nicht gerade blockiert ist, dort kann ständig etwas eingetippt werden,
das Restprogramm macht im einfachen Fall die meiste Zeit gar nichts, wird nur auf Button-Klick oder ähnliches kurzzeitig aktiv,
arbeitet dann für wenige ms, solange macht der User im Regelfall nichts (vergleiche Eintippen in Browser-Forum + Absenden-Klick)
 
R

roland_2345

Gast
Hallo,
danke für den Input. Du hast recht, das Coding für die Klasse ist noch nicht fertig.
Zum einfachen Erklärung:
Ich will ein Programm schreiben, in dem ich z.B. Lottozahlen eingeben und auswerten möchte.
Da habe ich eine hauptklasse, die macht
- Instanz von "eingabetest" erzeugen
...
- abfrage der ersten Eingabe durch eingabetest.hole_einen_gueltigen_wert()
- verarbeitung
- abfrage der zweiten Eingabe durch eingabetest.hole_einen_gueltigen_wert()

Ich habe die methode mal ergänzt, wie sie ungefähr funktionieren könnte.
Aber mir ist nicht wohl dabei, da es eine endlosschleife darstellt und die Gefahr besteht, dass es irgendwas geben könnte, was dann nicht zur beendigung der Schleife führt. Und ich frage mich, ob es nicht einen besseren Weg dafür gibt.

Viele Grüsse
Roland

Java:
import java.awt.*;                // das Paket awt wird sichtbar gemacht
import java.awt.event.*;          // Ereignisbehandlung

public class eingabetest 
	extends Frame 				  //Unsere Klasse erweitert die Klasse Frame
	{

    private TextField eingabe;
	private Label     ausgabe;
	boolean   gueltige_eingabe = true;

	public eingabetest() {	           		//Konstruktor
		super("Bitte geben Sie die Zahlen ein ");              //Den Titel festlegen
		Panel myContainer = new Panel();		//spezieller Container
		myContainer.setLayout(new BorderLayout(20,20));		//Layout einsetzen
		myContainer.setBackground(Color.lightGray);

	    eingabe = new TextField();
	    ausgabe = new Label();
		
	    setFont(new Font("sanserif", Font.BOLD, 20));
		
        myContainer.add(ausgabe,BorderLayout.CENTER);
        myContainer.add(eingabe,BorderLayout.SOUTH );
        
        eingabe.addActionListener(
        	      new ActionListener() {
        	        public void actionPerformed( ActionEvent ev ) {
        	          uebernehme_eingabe(); } } );

        addWindowListener(
        	      new WindowAdapter() {
        	        public void windowClosing( WindowEvent ev ) {
        	          dispose();
        	          System.exit( 0 ); } } );

		this.add(myContainer);				//Container dem Fenster hinzufuegen

		setLocation (600, 10);
		setSize(400, 200);
        setVisible(true);
	}
	
	void uebernehme_eingabe()
	{   
		// hier prüfe ich die Eingabe, wenn sie nicht stimmt, lasse ich wieder 
		// eingeben, wenn sie stimmt, nehme ich sie in ein internes Feld auf
		// fuer das Beispiel hier zeige ich sie einfach an
            	ausgabe.setText( "Eingabe war: " + eingabe.getText() );
            	eingabe.setText("");
            	gueltige_eingabe = true;
   	}

	
	public String hole_einen_gueltigen_wert() {
		gueltige_eingabe = false;
		while (gueltige_eingabe == false){
			// warte, Endlosschleife
		}
		return ausgabe.getText();
	}

	public static void main(String[] arg) {		//Das Hauptprogramm
		eingabetest myWin = new eingabetest();
		
		System.out.println("erster Wert: " + myWin.hole_einen_gueltigen_wert());
		System.out.println("zweiter Wert: " + myWin.hole_einen_gueltigen_wert());

	}
}
 
S

SlaterB

Gast
falls du das Wort wieder mir erteilst:
ich wüßte nicht was ich neues schreiben sollte außer energisch darauf hinzuweisen, dass normalerweise keine Schleife nebenher läuft,
siehe meine erste Antwort bzw. beliebige Anfänger-GUI-Beispiel-Programme in denen irgendetwas passiert
 
R

roland_2345

Gast
Hi all,
ich glaube, ich habe nun eine Lösung mit der ich für den Test zufrieden bin.
Erst In der Methode, die das Textfeld abfragt, starte ich erst den Action listener.
Dann warte ich, bis eine Eingabe gemacht wurde, remove den Action listener wieder und setze das Textfeld auf
nicht editierbar.

den kompletten code:
Java:
import java.awt.*;                // das Paket awt wird sichtbar gemacht
import java.awt.event.*;          // Ereignisbehandlung
import javax.swing.*;


public class eingabetest 
	extends Frame 				  //Unsere Klasse erweitert die Klasse Frame
	{

    private JTextField eingabe;
	private JLabel     ausgabe;
	boolean   gueltige_eingabe = true;

	public eingabetest() {	           		//Konstruktor
		super("Bitte geben Sie die Zahlen ein ");              //Den Titel festlegen
		Panel myContainer = new Panel();		//spezieller Container
		myContainer.setLayout(new BorderLayout(20,20));		//Layout einsetzen
		myContainer.setBackground(Color.lightGray);

	    eingabe = new JTextField();
	    ausgabe = new JLabel();
		
	    setFont(new Font("sanserif", Font.BOLD, 20));
		
        myContainer.add(ausgabe,BorderLayout.CENTER);
        myContainer.add(eingabe,BorderLayout.SOUTH );
        
        addWindowListener(
        	      new WindowAdapter() {
        	        public void windowClosing( WindowEvent ev ) {
        	          dispose();
        	          System.exit( 0 ); } } );

		this.add(myContainer);				//Container dem Fenster hinzufuegen

		setLocation (600, 10);
		setSize(400, 200);
        setVisible(true);
	}
	
	void uebernehme_eingabe()
	{   
		// hier prüfe ich die Eingabe, wenn sie nicht stimmt, lasse ich wieder 
		// eingeben, wenn sie stimmt, nehme ich sie in ein internes Feld auf
		// fuer das Beispiel hier zeige ich sie einfach an
            	ausgabe.setText( "Eingabe war: " + eingabe.getText() );
            	eingabe.setText("");
   	}

	
	public String hole_einen_gueltigen_wert() {
		gueltige_eingabe = false;
		eingabe.setEditable(true);
		eingabe.addActionListener(
      	      new ActionListener() {
      	        public void actionPerformed( ActionEvent ev ) {
      	           uebernehme_eingabe(); 
      	           gueltige_eingabe = true; } } );

      	while (gueltige_eingabe == false){
			// warte, Endlosschleife
		}
      	
        for(ActionListener al: eingabe.getActionListeners()){
            eingabe.removeActionListener(al);
          }
          eingabe.setEditable(false);
		return ausgabe.getText();
	}

	
	public static void main(String[] arg) {		//Das Hauptprogramm
		eingabetest myWin = new eingabetest();
		
		System.out.println("erster Wert: " + myWin.hole_einen_gueltigen_wert());
		System.out.println("zweiter Wert: " + myWin.hole_einen_gueltigen_wert());

	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Swing Text aus Textfield auslesen AWT, Swing, JavaFX & SWT 8
C Swing TextField auslesen AWT, Swing, JavaFX & SWT 21
R TextField auslesen & in Objekteigenschaften speichern AWT, Swing, JavaFX & SWT 22
S Fehler beim Auslesen des Textes im textfield AWT, Swing, JavaFX & SWT 8
Juelin Eingabensteuerung mit Textfield AWT, Swing, JavaFX & SWT 20
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
K JavaFX Taschenrechner textField auf 10stellen begrenzen AWT, Swing, JavaFX & SWT 26
Z textField.getText = null AWT, Swing, JavaFX & SWT 15
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
L Swing Wert vom Textfield in Array List hinzufügen AWT, Swing, JavaFX & SWT 2
R Textfield lässt sich nicht positionieren AWT, Swing, JavaFX & SWT 1
B JavaFX ListView in Kombination mit TextField AWT, Swing, JavaFX & SWT 5
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
Bluedaishi JavaFX JFoenix TextField KeyEvent AWT, Swing, JavaFX & SWT 2
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
F JavaFX textField Ausgabe automatisch kopieren AWT, Swing, JavaFX & SWT 7
M JavaFX String aus TextField reagiert nicht wie erwartet AWT, Swing, JavaFX & SWT 3
S JavaFX TextField auf Datentyp prüfen AWT, Swing, JavaFX & SWT 1
M JavaFX .setCellFactory () mit TextField AWT, Swing, JavaFX & SWT 4
L TextField Listener AWT, Swing, JavaFX & SWT 13
L TextField Eingabe in andere GUI übernehmen AWT, Swing, JavaFX & SWT 1
C JavaFX mit .setText() befülltes Textfield liefert anschließend mit .getText() den ursprünglichen Wert? AWT, Swing, JavaFX & SWT 1
K JavaFX Combobox, Textfield & setOnMouseClicked AWT, Swing, JavaFX & SWT 2
U Java FX Warten auf Textfield eingabe AWT, Swing, JavaFX & SWT 17
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
S Buttons und TextField automatisch vergrößern AWT, Swing, JavaFX & SWT 8
Y Listview Textfield vergrößern, Schrift anpassen AWT, Swing, JavaFX & SWT 0
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
I JavaFX TextField auf Eingabe prüfen AWT, Swing, JavaFX & SWT 3
D JavaFX Nur Zahlen in Textfield AWT, Swing, JavaFX & SWT 4
D Textfield bei starten füllen. AWT, Swing, JavaFX & SWT 5
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
P LayoutManager TextField.setSize(); in einem FlowLayout AWT, Swing, JavaFX & SWT 3
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
U Swing NullPointerException trotz Referenz auf Textfield & Button AWT, Swing, JavaFX & SWT 6
S LayoutManager TextField verschwindet / wird klein AWT, Swing, JavaFX & SWT 4
S Button in Textfield ziehen AWT, Swing, JavaFX & SWT 4
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
F Swing TextField Eingabe in Variable umwandeln um zum Beispiel zu rechnen. AWT, Swing, JavaFX & SWT 3
G JavaFX TextField Eingabe formatieren/einschränken AWT, Swing, JavaFX & SWT 2
C Integer in ein Textfield schreiben. AWT, Swing, JavaFX & SWT 4
P TextField beim klicken von JButton speichern AWT, Swing, JavaFX & SWT 17
MiMa Integer Zahl in Textfield ausgeben AWT, Swing, JavaFX & SWT 12
K Per Textfield Methode ausführen AWT, Swing, JavaFX & SWT 6
B JComboBox ans Textfield gelangen AWT, Swing, JavaFX & SWT 4
A Größe von Textfield bestimmen AWT, Swing, JavaFX & SWT 9
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
B AWT Mit TextField Zahlen einlesen lassen AWT, Swing, JavaFX & SWT 34
A Button und Textfield AWT, Swing, JavaFX & SWT 4
A TextField und Label AWT, Swing, JavaFX & SWT 8
H gui textfield AWT, Swing, JavaFX & SWT 5
A TextField: Textfeld teilweise editierbar AWT, Swing, JavaFX & SWT 2
E Button in TextField eibetten? AWT, Swing, JavaFX & SWT 4
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
W textfield zentriert AWT, Swing, JavaFX & SWT 2
N Swing Textfield listener AWT, Swing, JavaFX & SWT 2
H Zeich in einem TextField farblich markieren?! AWT, Swing, JavaFX & SWT 5
D Swing [BoxLayout] Nur TextArea und nicht TextField vergroessen AWT, Swing, JavaFX & SWT 2
D Textfield auswerten AWT, Swing, JavaFX & SWT 4
M Swing InputVerifer auf TextField AWT, Swing, JavaFX & SWT 14
B setText() auf TextField mit Document AWT, Swing, JavaFX & SWT 2
G Problem mit Textfield AWT, Swing, JavaFX & SWT 2
G Den Inhalt von einem Textfield aktualisieren AWT, Swing, JavaFX & SWT 6
D Inhalt von Textfield nach ComboBox AWT, Swing, JavaFX & SWT 2
E Swing Button ActionListener Infos aus Textfield und ComboBox AWT, Swing, JavaFX & SWT 3
G TextField im Hintergrund AWT, Swing, JavaFX & SWT 2
Z TextField aus ActionListener von JButton verändern AWT, Swing, JavaFX & SWT 10
O ComboBox hinter TextField? AWT, Swing, JavaFX & SWT 8
T Checkbox & Textfield AWT, Swing, JavaFX & SWT 5
M Beschränkung auf Nur-Zahleneingabe in Textfield klappt nicht AWT, Swing, JavaFX & SWT 3
N Textfield feste größe? AWT, Swing, JavaFX & SWT 1
M Datum Textfield AWT, Swing, JavaFX & SWT 6
S TextField fehler AWT, Swing, JavaFX & SWT 3
D Problem mit TextField AWT, Swing, JavaFX & SWT 22
C Textfield Background auf Standard zurücksetzen AWT, Swing, JavaFX & SWT 2
V keyListener soll textfield adden AWT, Swing, JavaFX & SWT 2
R TextField bringt NullPointerException bei setVisible() AWT, Swing, JavaFX & SWT 12
J JComboBox Eintrag soll TextField aktualisieren AWT, Swing, JavaFX & SWT 3
P Komponentenentwicklung mit TextField und Label AWT, Swing, JavaFX & SWT 10
K Problem mit TextField Strings AWT, Swing, JavaFX & SWT 2
S Textfield nummer merken AWT, Swing, JavaFX & SWT 3
M problem mit textfield-aktualisierung AWT, Swing, JavaFX & SWT 4
G Zugriff auf TextField geht nicht AWT, Swing, JavaFX & SWT 5
V Werte aus TextField in eine andere Klasse? AWT, Swing, JavaFX & SWT 2
M Textfield AWT, Swing, JavaFX & SWT 8
S "größeres Problem" mit JComboBox und Textfield AWT, Swing, JavaFX & SWT 35
P [TextField] cursor setzten AWT, Swing, JavaFX & SWT 2
S Eingabe einschränken bei TextField AWT, Swing, JavaFX & SWT 19
S AWT: Probleme mit TextField AWT, Swing, JavaFX & SWT 4
S TextField: Zeilenumbrüche AWT, Swing, JavaFX & SWT 3
E Zeilenumbruch in einem AWT TextField AWT, Swing, JavaFX & SWT 2
F requestFocus() auf ein TextField AWT, Swing, JavaFX & SWT 6
E ausgelesener String wird in Textfield nicht angezeigt AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben