F
Fabeltier
Gast
Hallo,
ich habe eine Documentklasse, um in einem JTextField nur die Eingabe von positiven oder negativen Gleitkommazahlen zu erlauben. Ich versuche dabei eine Umwandlung in double - wird eine NumberFormatException geworfen, dann wird diese gefangen und der Wert/die Ziffer nicht mehr im JTextField zugelassen. Soweit so gut, nur habe ich beobachtet, dass auch 'd' und 'f' solange sie in einer Zahl einzeln auftreten, wie etwa "2d" oder "2f" anscheinend gueltige Gleitkommazahlen darstellen. An hex Zahlen kann das wohl nicht liegen, da zB "2a", "2b" oder "2c" wiederum nicht akzeptiert werden, woran liegts dann? Wofuer stehn d und f - double und float? Wozu ist das gut?
Momentan hab ich einfach eine weitere if Klausel eingefuehrt.. Hier is ein Beispiel:
ich habe eine Documentklasse, um in einem JTextField nur die Eingabe von positiven oder negativen Gleitkommazahlen zu erlauben. Ich versuche dabei eine Umwandlung in double - wird eine NumberFormatException geworfen, dann wird diese gefangen und der Wert/die Ziffer nicht mehr im JTextField zugelassen. Soweit so gut, nur habe ich beobachtet, dass auch 'd' und 'f' solange sie in einer Zahl einzeln auftreten, wie etwa "2d" oder "2f" anscheinend gueltige Gleitkommazahlen darstellen. An hex Zahlen kann das wohl nicht liegen, da zB "2a", "2b" oder "2c" wiederum nicht akzeptiert werden, woran liegts dann? Wofuer stehn d und f - double und float? Wozu ist das gut?
Momentan hab ich einfach eine weitere if Klausel eingefuehrt.. Hier is ein Beispiel:
Code:
import java.awt.Toolkit;
import javax.swing.text.*;
/**
* Double document.
*
* @author user
*
*/
public class DocDouble extends PlainDocument{
private int iDigits = -1;
/**
* Ctor.
*
* @param iLen
* Number of digits.
*/
public DocDouble( int iLen){
this.iDigits = iLen;
}
/**
* The method to check the entered <CODE>String</CODE>.
*
* @param iOffs
* The offset of the <CODE>String</CODE>.
* @param szStr
* The <CODE>String</CODE> that has been entered.
* @param as
* The <CODE>AttributeSet</CODE> to pass further.
*/
public void insertString(int iOffs, String szStr, AttributeSet as) throws BadLocationException {
StringBuffer sb = new StringBuffer();
sb.append(getText(0, iOffs));
sb.append(szStr);
sb.append(getText(iOffs, getLength() - iOffs));
if (sb.toString().length() > iDigits) {
Toolkit.getDefaultToolkit().beep();
return;
}
try {
Double.parseDouble(sb.toString());
} catch (NumberFormatException e) {
Toolkit.getDefaultToolkit().beep();
if (!sb.toString().equals("-")){
return; //doesn't return on a single '-'
}
}
// warum sind hier noch 'd' und 'f' in der Zahl moeglich???
if(sb.toString().contains("d") || sb.toString().contains("f")){
Toolkit.getDefaultToolkit().beep();
return;
}
super.insertString(iOffs, szStr, as);
}
}