In meinem Programm gibt es ein TextFeld das nur DoubleZahlen mit zwei Kommastellen zulässt. Auf Windows funktioniert es, auf Mac nicht? Warum. Ich habe den Code doch selber geschrieben.
Code:
jtf.setDocument(new EingabeDouble(jtf));
Code:
import java.awt.Toolkit;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class EingabeDouble extends PlainDocument {
private boolean punkt = false;
private int stellenNachKomma = 0;
private JTextField jtf = null;
public EingabeDouble(JTextField txt) {
this.jtf = txt;
}
public void insertString(int pos, String s, AttributeSet attributeSet) throws BadLocationException {
if(jtf.getText().toString().indexOf(",") == -1) {
punkt = false;
} else {
punkt = true;
}
try {
if(s.indexOf(",") != -1 && s.length() > 1) {
punkt = true;
}
if (!s.equals(",")) {
Double.parseDouble(s);
} else {
if (punkt) {
throw new Exception();
} else {
punkt = true;
}
}
if(strAufZweiStellenTesten()) {
throw new Exception();
}
} catch(Exception ex) {
Toolkit.getDefaultToolkit().beep();
return;
}
try {
if(!s.equals(",") && punkt) {
stellenNachKomma++;
}
} catch(Exception e) {
}
s = strAufNullVorDemKommaTesten(s);
super.insertString(pos, s, attributeSet);
}
private String strAufNullVorDemKommaTesten(String s) {
if(jtf.getText().toString().isEmpty()) {
if(s.equals(",")) {
if(jtf.getText().indexOf(",") == -1) {
s = "0" + s;
}
}
}
return s;
}
private boolean strAufZweiStellenTesten() {
String s = jtf.getText();
int p = jtf.getText().indexOf(",");
p++;
int l = jtf.getText().length();
if(jtf.getText().toString().indexOf(",") != -1) {
if((l-p) >= 2) {
return true;
}
}
return false;
}
}