Подтвердить что ты не робот

Почему JFormattedTextField злой?

В этом вопросе Есть ли способ принять только числовые значения в JTextField? один из ответов, предложенный JFormattedTextField, имел проблемы.

Я еще не использовал его, но может ли кто-нибудь, пожалуйста, расширить (или не согласиться) на проблемы с этим классом?

4b9b3361

Ответ 1

JFormattedTextField является злом из-за плохого удобства использования. Например, если текстовое поле должно принимать только целочисленное значение, JFormattedTextField разрешит любой старый мусор, а затем будет жаловаться, когда фокус потерян. Хуже того, он имеет диапазон настраиваемых действий, когда фокус теряется (явный признак того, что ни один из них не является правильным выбором).

Он также имеет выбор "форматировщик" k3wl ". Он также, похоже, плохо взаимодействует с документом (он пытается установить DocumentFilter, но это не является частью интерфейса Document).

Ответ 2

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

Фактически это позволяет редактировать значения Integer, поскольку данные вводятся при использовании MaskFormatter. Поэтому для простых задач это может быть эффективным.

Редактирование данных - сложная задача. Иногда вам нужно редактировать данные по мере их ввода (в случае проверки значений Integer). Иногда вам нужно редактировать данные после их ввода (в случае проверки даты). Тогда, конечно, вам нужно решить, как обращаться с неверными данными.

При выполнении нетривиальных задач может быть определенная конфигурация параметров. Они могут не всегда работать так, как вы хотите, или тем, как вы их ожидаете, поэтому вам нужно поэкспериментировать, чтобы узнать, когда вы можете/должны использовать этот компонент.

Ответ 3

На данный момент я борюсь с JFormattetTextField. Я пытаюсь использовать NumberFormat.getPercentInstance() для форматирования моего процентного значения.

Хуже всего то, что .getValue() не возвращает то же значение, что и пользователь. В примере, если я набираю 25,5% в форматированном текстовом поле, он округляет его до 26%, но .getValue() возвращает 0.255. Это Зло.