Как установить значение JFormattedTextField с символом-заполнителем? - PullRequest
4 голосов
/ 10 июня 2009

У меня есть отформатированное текстовое поле для IP-адреса:

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"); не работает

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

Ответы [ 3 ]

5 голосов
/ 12 мая 2011

Довольно странно, но это возникло в другом вопросе (на Java: окно сетевых настроек ). После того, как вы покопались, оказалось, что есть реализация RegexFormatter от Sun (см. 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");

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

1 голос
/ 11 июня 2009

пробелы не считаются как числа (#) и как. считать как угодно. к сожалению, вы не сможете сопоставить 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

РЕДАКТИРОВАТЬ: вам придется использовать обычный JTextField и проверить его

0 голосов
/ 29 января 2017

Я пытался использовать маску для форматирования, но в нашей ситуации это не очень хорошо, поэтому я пришел к этому методу, используя 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);
    }
});

Здесь при каждом обновлении поля ввод будет проверяться с использованием matcher:

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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...