Hi Leutz.
Ich hab ein riesen Problem.
Es geht um die Prüfung eines JTextField bzw. JFormattedTextField.
folgendes Problem:
eine Zahl soll eingegeben werden.
länge, art der Zeichen(Integer, String usw.) soll vorgegeben sein und die nachkommastellen müssen fest sein(z.B. 4 nachkommastellen..bei eingabe von 1,2 soll es 1,2000 beim verlassen des Feldes werden und bei 1,23456 UNGERUNDET 1,2345.. also einfach der rest abgeschnitten werden.)
für die GESAMTLÄNGE der eingabe und die ART DER ZEICHEN habe ich eine Lösung..
aber ich glaub ich bin irgendwie auf ner falschen fährte.
Hier mal bisschen code von meinem ansatz.
Aber ich denke das wird so nicht ganz lösbar sein..
hier mal der das JFormattedTextField..
und hier die Klasse DecimalDocument..
ist ein ziemlich komplexes problem...
ein kompletter neuanfang wär auch ok. auch ein normales JTextField nehmen wär ok.
plz help
gruss
MScalli
Ich hab ein riesen Problem.
Es geht um die Prüfung eines JTextField bzw. JFormattedTextField.
folgendes Problem:
eine Zahl soll eingegeben werden.
länge, art der Zeichen(Integer, String usw.) soll vorgegeben sein und die nachkommastellen müssen fest sein(z.B. 4 nachkommastellen..bei eingabe von 1,2 soll es 1,2000 beim verlassen des Feldes werden und bei 1,23456 UNGERUNDET 1,2345.. also einfach der rest abgeschnitten werden.)
für die GESAMTLÄNGE der eingabe und die ART DER ZEICHEN habe ich eine Lösung..
aber ich glaub ich bin irgendwie auf ner falschen fährte.
Hier mal bisschen code von meinem ansatz.
Aber ich denke das wird so nicht ganz lösbar sein..
hier mal der das JFormattedTextField..
Code:
tf_umrechnungsfaktor = new JFormattedTextField();
tf_umrechnungsfaktor.setDocument(new DecimalDocument(10));
tf_umrechnungsfaktor.setFont(MyParam.getTextFieldFont());
tf_umrechnungsfaktor.setBounds(130, 110, 80, 25);
tf_umrechnungsfaktor.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
tf_umrechnungsfaktor.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent arg0) {
}
public void focusLost(FocusEvent arg0) {
// Evtl beim verlasses die nachkommastellen abschneiden/0 anhängen
System.out.println("Focus Verlassen!!");
}
});
pan_einkauf.add(tf_umrechnungsfaktor);
und hier die Klasse DecimalDocument..
Code:
import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;
/**
* Diese Klasse ist ein Dokument für Textfelder, welches...
*
* 1. Eingabe auf x Zeichen begrenzt.
* 2. Nur die Zeichen zulässt die in der Variable valid stehen
*
* Die Zuweisung geschieht über
* JTextfield.setDocumenT(new Validation(int anzahl));
*/
public class DecimalDocument extends PlainDocument{
private static final long serialVersionUID = 5032290234368360350L;
private int limit;
/**
* Konstruktor für das Validationdokument
* @param int limit: maximale Anzahl der einzugebenen Zeichen
*/
public DecimalDocument(int newLimit){
super();
if (limit < 0){
limit = 0;
} else {
limit = newLimit;
}
}
/**
* Funktion überschreibt die Methode insertString von PlaintDocument
* @param int offset: Position
* @param String str: der String
* @param AttributeSet attr: Attributset
*/
public void insertString (int offset, String str, AttributeSet attr) throws BadLocationException {
if (str == null) return;
//Zeichenkette mit den gültigen Zeichen
String valid = ".-,0123456789";
for (int i=0; i<str.length();i++) {
System.out.println();
if (valid.indexOf(str.charAt(i)) == -1) {
// wenn man hier rein kommt ist das eingegebene Zeichen ungültig!!
return;
}
if ((getLength() + str.length()) > limit){
// wenn man hier rein kommt ist das übergebene limit erreicht
return;
}
//Wichtig Aufruf der übergeordneten Methode
super.insertString(offset, str, attr);
}
}
}
ist ein ziemlich komplexes problem...
ein kompletter neuanfang wär auch ok. auch ein normales JTextField nehmen wär ok.
plz help
gruss
MScalli