JTextField eingaben

Saban

Erfahrenes Mitglied
Hallo Zusammen!

ich habe 8 JTextFields und jedes soll nur eine Zahl aufnehmen können.
Also das mit den Zahlen erreich ich mit Hilfe eines PlainDocuments. Nach dem nun eine Zahl eingegeben wurde soll der Cursor automatisch in das nächste TextFeld springen. Könnt ihr mir da helfen?

MfG
Saban
 
Moin,

so aus dem Bauch heraus, würde ich sagen:
Eingabe prüfen, ob sie Deinen Bedingungen entspricht (Wertebereich etc.), wenn ja, zum nächsten Eingabefeld wechseln!

Zeig' doch mal den Code, den Du schon hast ...

Gruß
Klaus
 
Hi!

Also hier mein TextFeld
Java:
for(int index = 0; index < tf_pvm.length; index++){
	tf_pvm[index] = new JTextField();	
	tf_pvm[index].setHorizontalAlignment(JTextField.CENTER);
	tf_pvm[index].setDocument(new BK_TextFeld_Begrenzung(1));
	add(tf_pvm[index]);
}
		
tf_pvm[0].setBounds		( 10, 25, 20, 20);
tf_pvm[1].setBounds		( 30, 25, 20, 20);
tf_pvm[2].setBounds		( 55, 25, 20, 20);
tf_pvm[3].setBounds		( 75, 25, 20, 20);
tf_pvm[4].setBounds		(100, 25, 20, 20);
tf_pvm[5].setBounds		(120, 25, 20, 20);
tf_pvm[6].setBounds		(140, 25, 20, 20);
tf_pvm[7].setBounds		(160, 25, 20, 20);

und hier das PlainDocument um die Eingaben einzugrenzen
Java:
package GUI_Tool_2;

import java.awt.AWTException;
import java.awt.Robot;

import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;

/**
 * Diese Klasse ist ein Dokument für Textfelder, welches die Eingabe auf
 * x Zeichen begrenzt.
 *
 * Die Zuweisung geschieht über
 * JTextfield.setDocumenT(new Validation(int anzahl));
 */
public class BK_TextFeld_Begrenzung extends PlainDocument
{
    private int limit;

    /**
     * Konstruktor für das Validationdokument
     * @param int limit: maximale Anzahl der einzugebenen Zeichen
     */
    public BK_TextFeld_Begrenzung(int newLimit)
    {
        super();
        if (limit < 0)
        {
            limit = 0;
        }
        else
        {
            limit = newLimit;
        }
    }
        

    private String mask = "0123456789";
    private int maxLength = 1;

    public void insertString(int off, String str, AttributeSet a) throws BadLocationException
    {
        if(str.length()+getLength() > maxLength)
            return;
        if(mask.indexOf(str)==-1)
            return;
        super.insertString(off,str,a);    
    }
}

Das funktioniert auch alles ich hab nur keine Ahnung wie ich des mit Cursor umsetzen soll...

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

also ich würde für das Textfeld einen KeyListener implementieren (falls nicht schon geschehen) und dort die gewünschten Key-Events abfangen!

Gruß
Klaus
 
Hallo!

Meinst du jetzt die KeyEvents abfangen um die falschen Eingaben zu blockieren oder KeyEvents abfangen um ins nächste TextFeld zu springen?

MfG
Saban
 
Meinst du jetzt die KeyEvents abfangen um die falschen Eingaben zu blockieren oder KeyEvents abfangen um ins nächste TextFeld zu springen?

Hallo,

Sowohl als auch!
Du kannst dort bspw. der eingegebenen Wertebereich prüfen und ggf. darauf reagieren, aber auch, wenn die Eingabe ok war und bspw. eine bestimmte Taste gedrückt wurde (etwa ENTER oder TAB oder so) zum nächsten gewünschten Eingabefeld springen, indem Du darauf den Fokus setzt :
Java:
tf_pvm[index].requestFocus();

Zudem würde ich mal prüfen, ob Du nicht mit einem JFormattedTextField() vielleicht einfacher klar kommst!

Gruß
Klaus
 
Du könntest auch folgendes machen, wenn du den Benutzer im Textfeld "halten" willst, sobald er etwas falschen eintippt.

Java:
textfield.setInputVerifier(new TestVerifier());

...

class TestVerifier extends InputVerifier {

         public boolean verify(JComponent input) {
 
               JTextField tf = (JTextField) input;
               boolean bool = false;

               // Bedingungen überprüfen udn bool setzen

               return (bool);

         }

}

Wie den Fokus kannst du doch einfach

Java:
textfield.grabFocus();

benutzen.
 
Hi!

Also erst mal vielen vielen Dank für eure Tips :)
Aber da liegt ein kleines Missverständnis vor! Das PlainDocument lässt den Benutzer sowieso nur noch Zahlen die ich vordefiniere eingeben und die Anzahl an Zeichen wird auch vom PlainDocument überprüft ich wollt nur noch wissen wie ich den Cursor ins nächste TextFeld setzen kann aber das hab ich jetzt dank euch ja jetzt auch raus gefunden :D

MfG
Saban
 
Ok, habe ich wohl überlesen, bitte um Entschuldigung.

Allerdings habe ich auch dieses hier gefunden ;)

This method is intended for use by focus implementations. Client code should not use this method; instead, it should use requestFocusInWindow().
 

Neue Beiträge

Zurück