У меня необычная проблема, что-то работает немного хорошо. Я написал DocumentFilter
, позволяющий вводить пользователя только как цифры, DocumentFilter
добавить тире на свое место в нужном месте во время записи. Таким образом, в JTextField
видна дата: «2016-05-01». Проблема в том, что JTextField
не всегда заполняется пользователем, иногда он должен быть установлен программой. Но когда я использую код setText («2016-05-01»), он не отображается должным образом, все тире исчезли. Как заставить его работать? Я попытался изменить DocumentFilter
, чтобы разрешить тире, но это почему вызывает проблемы во многих других местах. Я, вероятно, в конечном итоге напишу еще DocumentFilter
только для этого, но, возможно, есть другой способ? Можно ли добавить атрибут JTextField
char? Есть ли способ переключиться с DocumentFilter
, или, возможно, можно легко изменить DocumentFilter
, чтобы он не раздавился в других ладонях и не работал здесь? Ниже часть кода для DocumentFilter
Создание JTextField принимает смешанную строку, whet documentFIlter alow только цифры
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();
}
Вы пробовали 'SetText ("20160501") '? – Titus
Да, он дает тот же результат, что и «2016-05-01». В обоих случаях он показывает 20160501 – Majlena