2015-05-23 5 views
1

Так что у меня этот FormatedTextFieldКак изменить динамическую форму FormatedTextField?

JFormattedTextField myFtf = new JFormattedTextField(); 

, который имеет следующую маску, помещенную в моем приложении конструктор

try { 
    myFtf.setFormatterFactory(
     new DefaultFormatterFactory(
      new MaskFormatter("###.###.###-##"))); 
} catch (java.text.ParseException ex) { 
    ex.printStackTrace(); 
} 

Тогда, у меня есть две кнопки радио, которые должны быть изменения маски форматировщик в myFtf ,

Я попытался следующие:

private radioButton1ActionPerformed(java.awt.event.ActionEvent evt) {             
    try { 
     myFtf.setFormatterFactory(
      new DefaultFormatterFactory(
       new MaskFormatter("###.###.###-##"))); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}             

private void radioButton2ActionPerformed(java.awt.event.ActionEvent evt) {      
    try { 
     myFtf.setFormatterFactory(
      new DefaultFormatterFactory(
       new MaskFormatter("##.###.###/####-##"))); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Который работает хорошо, пока я пытаюсь изменить свои маски , когда вводится в текстовое поле. В случае, если нет, он больше не меняет маску. Вот несколько отпечатков:


OK Сценарий:

IMG: с enter image description here

переключения радио кнопки дает мне это:

IMG B: enter image description here


Buggy сценарий:

IMG с: enter image description here

переключения радио кнопки дает мне это:

IMG d: enter image description here

Я ожидал IMG d быть точно как IMG a


Как я могу правильно изменить маску?

+0

Какой результат вы ожидали во втором сценарии? То же, что и в первом? – user1803551

+0

@ user1803551 yes, очищенные боксы без ввода и правильной маски – user2018675

ответ

0

Изменение ваших слушателей действий к этому:

private radioButton1ActionPerformed(java.awt.event.ActionEvent evt) {             
    try { 
     myFtf.setFormatterFactory(
      new DefaultFormatterFactory(
       new MaskFormatter("###.###.###-##"))); 
     myFtf.setText(""); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}             

private void radioButton2ActionPerformed(java.awt.event.ActionEvent evt) {      
    try { 
     myFtf.setFormatterFactory(
      new DefaultFormatterFactory(
       new MaskFormatter("##.###.###/####-##"))); 
     myFtf.setText(""); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Это должно очистить текстовые поля. Удачи!

+0

Благодарим вас за ответ, но, к сожалению, я все равно получаю такое же поведение. – user2018675

0

Я получил его правильно! Все, что мне нужно было сделать, это добавить

myFtf.setValue(null); 

после установки новой фабрики форматирования. myFtf.setText("") не работает должным образом, но был близок! :-)

Смежные вопросы