2014-01-14 5 views
1

у меня есть JFormattedTextField, и я хочу, чтобы, когда я пытаюсь ввести номер, пример 1002, что я будет округлена до ближайшего числа, кратного 5JFormattedTextField округляется число

1002-> 1000

304- > 305

6-> 5

9-> 10

1-> 0

и т.д ..

я уже настроить формат номера, чтобы отменить группировку, и принимать только цифры

NumberFormat format=NumberFormat.getInstance(); 
format.setGroupingUsed(false); 
pun1[i]=new JFormattedTextField(format); //pun1 and pun2 are the arrays of FIELDS 
pun2[i]=new JFormattedTextField(format); 

как я могу решить эту проблему?

Я хочу, чтобы это редактирование внутри поля, в то время как я пишу номер, так же, как при появлении символа группировки!

ответ

0

Это работает для int аргументов:

public int roundToClosestFive(int num) { 
    return (int) (Math.round(num/5.0) * 5); 
} 

Помните, чтобы получить значение строки, которые вы указали вы можете сделать int: Integer.valueOf(string); и передать в качестве аргумента метода. Чтобы текст внутри изменения или изменения фокуса изменился, вы можете вызвать вышеупомянутый метод из метода propertyChange() слушателя PropertyChange, который вы можете добавить в JTextFormattedTextField. Нечто подобное в методе propertyChange():

public void propertyChange(PropertyChangeEvent e) { 
    Object source = e.getSource(); 
    if (source == pun1[i]) { 
     ((JFormattedTextField) source).setText("" 
       + roundToClosestFive(((Number)pun1[i].getValue()).intValue())); 
    } 
} 
+0

Я хочу, чтобы это изменение во время редактирования поля, так что я пишу «1003», а число внутри изменения поля до 1005 –

+0

Ok, я добавил к мой ответ. Это работает для вас? Опять же, для вышеуказанного случая вам нужно будет перемещать фокус от «JTextFormattedField» или нажать Enter для текста внутри поля для изменения. –

+0

Нет, это не работает: \ если не JTextFormattedField, что вы предлагаете? –