Textfelder eingrenzen

  • Themenstarter Themenstarter Java_Neuling
  • Beginndatum Beginndatum
J

Java_Neuling

Hi,

also ich stehe vor folgendem Problem und zwar habe ich 6 JTextFields und diese möchte ich nun für unterschiedliche Anforderungen eingrenzen (z.B. String mit 20 Zeichen, Double-Werte etc. - !aufgabe für die Schule!). Ich habe mir schon mal für einen Notenberechner, den ich in java so zur übung programmiert habe, aus einigen PlainDocuments einen eigenen gebastelt nur finde ich es bisschen umständlich 6 PlainDocuments zu schreiben das jedes TextFeld je nach dem wie ich es grad will die eingabe überprüft werden kann... hat jemand ne bessere Idee? wenn ja freue ich mich über jeden Tip!

Mein PlainDocument:

Code:
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 NotenBerechner_TextFeldBegrenzung extends PlainDocument
{
    private int limit;

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

    private String mask = "123456";
    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);    
    }
}

MfG
Java_Neuling
 
Zuletzt bearbeitet von einem Moderator:
Also, die Länge, die der einzugebende Text maximal haben darf, kannst du glaub ich dem Konstruktor beim erstellen des Widgets übergeben. Also
... = new JTextfield(10)
Ansonsten, würde ich einfach den eingegebenen Text nehmen und mit einem entsprechendem Regex überprüfen. Bei einem Zahlenfeld zB [0-9]+

PS: Ich hoffe ich habe dich richtig verstanden?^^ Ist ja schon spät.... Gute Nacht;)
 
Hola!

müsste das nicht mit einem KeyListener funktionieren?!
Nach jeder gedrückten Taste soll die Länge des bisher eingegebenen Textes überprüft werden...
Nur ein Denkanstoß, hab sowas noch nie machen müssen :)

Gruß
Felix

EDIT:
schnell gezaubert, hehe ...
Java:
package Examples;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class View {

	static JFrame frame = new JFrame();
	static JPanel content = (JPanel) frame.getContentPane();
	static JTextField text = new JTextField();
	static JLabel label = new JLabel("Max. 15 Zeichen", JLabel.CENTER);
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {			
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(new Dimension(125,85));
		
		content.setLayout(new GridLayout(2,1));
		label.setOpaque(true);
		text.addKeyListener(new KeyListener() {
			public void keyPressed(KeyEvent arg0) {
				String str = text.getText();
				if(str.length()>15) {
					label.setForeground(Color.RED);
					label.setText("zu lang!");
					text.setText(text.getText().substring(0, 15));
				}
				else {
					label.setText("ok!");
					label.setForeground(Color.GREEN);					
				}
				System.out.println("Zeichen übrig: "+ (15-text.getText().length()));
			}
			
			public void keyReleased(KeyEvent arg0) {}
			public void keyTyped(KeyEvent arg0) {}		
		});
		
		content.add(label);
		content.add(text);
		
		frame.setVisible(true);
	}

}

Viel Spaß!
Gruß
Felix
 
Zuletzt bearbeitet:
Nen double bekommst mit parseDouble raus
hier ein kleiner ausschnitt von einem meiner Programme

Java:
try{
	modelDaten.gehalt = Double.parseDouble(textfeldGehalt.getText());	

catch (NumberFormatException f){
	textfeldGehalt.setBackground(new Color(255,183,183));

}
 
Also das mit dem
Code:
JTextField tf = new JTextField(10)
funktioniert nicht das sagt zwar jeder im inet aber ich hab noch keinen getroffen bei dem es ging...

Das mit dem KeyListener ist eine super Idee danke für den Tipp ;) und an RegEx hab ich nicht gedacht das könnte die Lösung sein :D

Also bei der Antwort mit dem parsen mache ich zwar aus dem String nen double aber ich steh wieder vor dem Problem das ich die Eingaben nicht abprüfen und das ist ja eigentlich mein Problem...

Danke für die Antworten :)

MfG
Java Neuling
 
Zuletzt bearbeitet von einem Moderator:
Kannst das doch in den Keylistener einbauen.
OnKeyDown, machst den Test, wenn der erfolgreich ist weisst ja Bescheid.
Also einfach mal den TextFeld Wert in eine temp variable schreiben.
 
Hi da bin ich nochmal! :(

Also ich wollte grade die RegEx einbauen und steh nun vor folgendem problem und zwar kann ich ja regex nur sagen welche zeichen enthalten sein dürfen aber wie benutz ich die RegEx wenn ich sagen will ne zahl von 10 bis 1000 ?
Ich hatte nur kurz in der Arbeit mit RegEx zu tun tut mir leid falls die Frage dumm ist...

MfG
Java_Neuling
 
Zurück