2009-06-10 2 views
4

У меня есть отформатированный текстовое поле для IP-адрес:Как установить значение JFormattedTextField с символом-заполнителем?

ipmask = new MaskFormatter("###.###.###.###"); 
ipmask.setPlaceholderCharacter(' '); 
field = new JFormattedTextField(ipmask); 

field.setValue("111.222.333.444"); работы, но

field.setValue(" 10.222.333.444"); не работает

field.setValue("10 .222.333.444"); не работает

field.setValue("10.222.333.444"); не работает

Каков правильный способ установить значение val у.е.?

+0

По-видимому, заполнитель символов может быть использован только в конце строки. Я не могу найти способ обойти это, и я удаляю свой неправильный ответ. –

ответ

1

пробелы не считаются числами (#) и. считайте что угодно. к сожалению, вы не сможете сопоставить IP-адрес с MaskFormatter, если вы не найдете способ иметь несколько MaskFormatters для 1 JFormattedTextField.

проще

if (field.getValue().matches("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}")) //do something 

EDIT: вы должны будете использовать регулярные JTextField и проверить его

+0

Я знаю, что могу написать свой собственный класс, чтобы сделать это, но будет лучше, если вы построили Java-классы. – 5YrsLaterDBA

5

Довольно странно, но это произошло в другом вопросе (в Java: network settings window). После того, как копаться оказывается есть реализация RegexFormatter от Солнца (см http://java.sun.com/products/jfc/tsc/articles/reftf/, загрузить исходный код на http://java.sun.com/products/jfc/tsc/articles/reftf/RegexFormatter.java), которые вы можете использовать, как это:

JFormattedTextField ipAddress; 
    try{ 
    RegexFormatter ipmask = new RegexFormatter("\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}"); 
     ipmask.setOverwriteMode(false); 
    ipAddress = new JFormattedTextField(ipmask); 
}catch(Exception e1){ 
} 
ipAddress.setValue("255.255.255.255"); 

Вы, вероятно, перешли от сюда, но думал, что я d придерживайте это на всякий случай, когда кто-то еще блуждает.

0

Я попытался использовать форматирование масок, но это не очень хорошо с нашей ситуацией, поэтому я придумал этот метод с использованием Regex и мгновенной проверки для ввода пользователем.

Этот код генерируется с помощью GUI Builder:

jFormattedTextField2 = new javax.swing.JFormattedTextField(); 
jFormattedTextField2.setHorizontalAlignment(jFormattedTextField2.CENTER); 
jFormattedTextField2.addCaretListener(new javax.swing.event.CaretListener() { 
    public void caretUpdate(javax.swing.event.CaretEvent evt) { 
     jFormattedTextField2CaretUpdate(evt); 
    } 
}); 

Здесь на каждом обновлении поля на входе будет проверяться с помощью Искателя:

private void jFormattedTextField2CaretUpdate(javax.swing.event.CaretEvent evt) {             
     // validation happen here and the text is red if IP is invalid 
     final String regex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; 
     final Pattern pattern = Pattern.compile(regex); 
     String ip = jFormattedTextField2.getText(); 
     Matcher m = pattern.matcher(ip); 
     jFormattedTextField2.setForeground(Color.red); 
     if (m.matches()) { 
      jFormattedTextField2.setForeground(Color.black); 
     } 
    } 
Смежные вопросы