Ich habe ein ungewöhnliches Problem, etwas funktioniert zu gut. Ich habe eine DocumentFilter
Hexe geschrieben, die Benutzereingaben nur als Zahlen erlaubt, DocumentFilter
fügen Sie hinzu, daß Strich an seinem eigenen richtigen Platz während des Schreibens ist. Auf diese Weise in JTextField
ist sichtbares Datum wie folgt: "2016-05-01". Das Problem ist, dass JTextField
nicht immer vom Benutzer ausgefüllt wird, manchmal muss es vom Programm festgelegt werden. Aber wenn ich code setText ("2016-05-01") verwende, wird es nicht richtig angezeigt, alle Dash sind weg. Wie funktioniert es? Ich habe versucht, DocumentFilter
zu ändern, um Dash zu erlauben, aber das verursacht warum Probleme in vielen anderen Orten. Ich werde wahrscheinlich am Ende schreiben ein anderes DocumentFilter
nur dafür, aber vielleicht gibt es einen anderen Weg? Ist es möglich, JTextField
char von char anhängen? Gibt es eine Möglichkeit, einen aus der DocumentFilter
einzuschalten, oder vielleicht ist es möglich, DocumentFilter
smart zu ändern, so wird es nicht in oder Plätze knacken und hier auch arbeiten? Im Folgenden Teil des Codes für DocumentFilter
Making JTextField akzeptieren gemischte String, wetzen Sie documentFIlter nur die Ziffern
public void replace(FilterBypass fb, int offs, int length, String str,
AttributeSet a) throws BadLocationException {
if (str == null || str.equals(""))
{
super.replace(fb, offs, length, str, a);
}
else
{
StringBuffer buffer = new StringBuffer(str);
for (int i = buffer.length() - 1; i >= 0; i--)
{
char ch = buffer.charAt(i);
if (!Character.isDigit(ch))
{
buffer.deleteCharAt(i);
}
}
str = buffer.toString();
//sign and sign2 is char number were separator(sep) is written
if (fb.getDocument().getLength() + str.length() == sign)
{
str = str + sep;
}
if (fb.getDocument().getLength() + str.length() == sign2)
{
str = str + sep;
}
if ((fb.getDocument().getLength() + str.length() - length) <= maxCharacters)
super.replace(fb, offs, length, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
Haben Sie versucht, 'setText ("20160501") '? – Titus
Ja, es gibt das gleiche Ergebnis wie "2016-05-01". In beiden Fällen zeigt es 20160501 – Majlena