2017-01-13 13 views
0

Я пытаюсь ограничить входные значения внутри JFormatdedTextField на [0,1, 100] с использованием AbstractFormatterJFormattedTextField, принимают значения [0,1, 100], неудобно написание чисел

public AbstractFormatter getFormatter(JFormattedTextField tf) { 
    NumberFormat f = DecimalFormat.getInstance(); 
    f.setMinimumFractionDigits(1); 
    f.setMaximumFractionDigits(2); 
    InternationalFormatter iff= new InternationalFormatter(f); 
    iff.setAllowsInvalid(false); 
    iff.setMinimum(0.1); 
    iff.setMaximum(100.00); 
    return iff; 
} 

Однако абстрактный форматировщик имеет странное поведение. Предположим, что я хотел бы написать следующее число внутри интервала: 0.2.

Абстрактные Formatter блоки первая цифра: 0. Необходимо написать 0.2 в 2 этапа:

a] 1.2 //or any digit > 0 
b] delete 1: 1.2->0.2 

Такое поведение является для пользователя запутанной. Есть ли способ предотвратить эту неудобную запись чисел?

Благодарим за помощь.

+1

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

+1

Либо это, либо создайте свой собственный класс InputVerifier и используйте его вместо этого. – markspace

ответ

1

Я думаю, что вам нужно, это JSPinner:

JSpinner spin = new JSpinner(new SpinnerNumberModel(50 /*or whatever*/, 0.1, 100, 0.1)); 

или вы можете просто удалить строку

iff.setAllowsInvalid(false); 

удалить запутанное поведение. В Javadocs для этого метода говорят:

Задает, будет ли или нет значение редактируемого разрешено недействительным в течение промежутка времени (то есть, stringToValue бросает ParseException). Часто бывает удобно разрешить пользователю временно ввести недопустимое значение.

Это позволит фокусу покинуть компонент, если значение недействительно, и оно будет возвращено к предыдущему действительному значению. Если вы хотите не допускать потери фокуса, используйте верификатор ввода, как указано в комментариях. В Javadocs есть пример: JFormattedTextField: http://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html