Я знаю, ви можете передати форматКонструктор JFormattedTextField, але як би ви змінили формат під час виконання? Наприклад, у мене є поле, яке має бути сформоване на цілі значення, але коли значення певного комбінованого поля змінюється, тепер поле повинно приймати знаки з плаваючою величиною.
Відповіді:
7 для відповіді № 1Ви можете покликатись setFormatterFactory (JFormattedTextField.Ab абстрактFormatterFactory) на твій об'єкт.
Ви можете використовувати його таким чином:
// Define the number factory.
NumberFormat nf = NumberFormat.getIntegerInstance(); // Specify specific format here.
NumberFormatter nff = new NumberFormatter(nf);
DefaultFormatterFactory factory = new DefaultFormatterFactory(nff);
// Define the decimal factory.
DecimalFormat df = new DecimalFormat(); // And here..
NumberFormatter dnff = new NumberFormatter(df);
DefaultFormatterFactory factory2 = new DefaultFormatterFactory(dnff);
// Then you set which factory to use.
JFormattedTextField field = new JFormattedTextField();
field.setFormatterFactory(factory);
//field.setFormatterFactory(factory2);
Тому просто встановіть завод, коли відбудеться ваша подія.
Зауважимо, що конструктор DefaultFormatterFactory
може приймати кілька форматів; типовий, формат відображення, коли він не має фокусу, формат редагування, коли він має фокус, і нульовий формат, коли поле має нульове значення.
1 для відповіді № 2
Це приклад використовує InputVerifier
щоб додати варіанти до формату за замовчуванням. Він розроблений для Date
, але ви, можливо, зможете адаптувати підхід Number
.