Spec-Zone .ru
спецификации, руководства, описания, API
|
Отформатированные текстовые поля обеспечивают способ для разработчиков определить допустимый набор символов, которые могут быть введены в текстовом поле. Определенно, JFormattedTextField
class добавляет средство форматирования и объектное значение к функциям, наследованным от JTextField
class. Средство форматирования преобразовывает значение поля в текст, который это выводит на экран, и текст в значение поля.
Используя средства форматирования, которые обеспечивает Swing, можно установить отформатированные текстовые поля, чтобы ввести даты и числа в локализованных форматах. Другой вид средства форматирования позволяет Вам использовать символьную маску, чтобы определить набор символов, которые могут быть введены в каждой позиции в поле. Например, можно определить маску для того, чтобы ввести номера телефона в определенном формате, такой как (XX) X-XX-XX-XX-XX.
Если у возможных значений отформатированного текстового поля есть очевидный порядок, используйте прядильщика вместо этого. Прядильщик использует отформатированное текстовое поле по умолчанию, но добавляет две кнопки, которые позволяют пользователю выбрать значение в последовательности.
Другая альтернатива или дополнение к использованию отформатированного текстового поля устанавливают
Этот GUI использует отформатированные текстовые поля, чтобы вывести на экран числа в четырех различных форматах.
2000abcd
. Когда Вы перемещаете фокус от поля Loan Amount, текст, который это выводит на экран, обновляется к аккуратно отформатированной версии его значения, например, "2 000".Можно найти весь код для этой программы в
. Этот код создает первое поле.FormattedTextFieldDemo.java
amountField = new JFormattedTextField(amountFormat); amountField.setValue(new Double(amount)); amountField.setColumns(10); amountField.addPropertyChangeListener("value", this); ... amountFormat = NumberFormat.getNumberInstance();
Конструктор имел обыкновение создавать amountField
объект берет a java.text.Format
параметр. Format
объект используется средством форматирования поля, чтобы преобразовать значение поля в текст и текст к значению поля.
Остающиеся кодовые наборы amountField
объект. setValue
метод устанавливает свойство значения поля в число с плавающей точкой, представленное как a Double
объект. setColumns
метод, наследованный от JTextField
class, подсказки о привилегированном размере поля. Звонок addPropertyChangeListener
метод регистрирует слушателя для свойства значения поля, таким образом, программа может обновить поле Monthly Payment всякий раз, когда пользователь изменяет количество ссуды.
Остальная часть этого раздела затрагивает следующие темы:
Этот раздел не объясняет API, наследованный от JTextField
class. Тот API описывается в том, Как Использовать Текстовые поля.
Следующий код создает и инициализирует оставление тремя полями в FormattedTextFieldDemo
пример.
rateField = new JFormattedTextField(percentFormat); rateField.setValue(new Double(rate)); rateField.setColumns(10); rateField.addPropertyChangeListener("value", this); numPeriodsField = new JFormattedTextField(); numPeriodsField.setValue(new Integer(numPeriods)); numPeriodsField.setColumns(10); numPeriodsField.addPropertyChangeListener("value", this); paymentField = new JFormattedTextField(paymentFormat); paymentField.setValue(new Double(payment)); paymentField.setColumns(10); paymentField.setEditable(false); paymentField.setForeground(Color.red); ... percentFormat = NumberFormat.getNumberInstance(); percentFormat.setMinimumFractionDigits(2); paymentFormat = NumberFormat.getCurrencyInstance();
Код для того, чтобы установить rateField
объект почти идентичен коду, перечисленному ранее для других полей. Единственная разница - то, что формат немного отличается благодаря коду percentFormat.setMinimumFractionDigits(2)
.
Код, который создает numPeriodsField
объект явно не устанавливает формат или средство форматирования. Вместо этого это устанавливает значение в Integer
и позволяет полю использовать средство форматирования значения по умолчанию для Integer
объекты. Код не делал этого в предыдущих двух полях, потому что средство форматирования значения по умолчанию не используется для Double
объекты. Результат не состоял в том тем, что было необходимо. Как определить, что форматы и средства форматирования покрываются позже в этом разделе.
Платежное поле отличается от других полей, потому что это недоступно для редактирования, использует различный цвет для своего текста, и не имеет слушателя изменения свойства. Иначе, это идентично другим полям. Мы, возможно, хотели использовать текстовое поле или метку вместо этого. Безотносительно компонента мы могли все еще использовать paymentFormat
метод, чтобы проанализировать оплату составляет в текст, который будет выведен на экран.
Помните следующее при использовании отформатированного текстового поля:
Текст отформатированного текстового поля и его значение являются двумя различными свойствами, и значение часто отстает от текста.
Текстовое свойство определяется JTextField
class. Это свойство всегда отражает то, что выводит на экран поле. Свойство значения, определенное JFormattedTextField
class, не мог бы отразить последний текст, выведенный на экран в поле. В то время как пользователь вводит, текстовые изменения свойства, но свойство значения не изменяется, пока изменения не фиксируются.
Чтобы быть более точным, значение отформатированного текстового поля может быть установлено при использовании любого setValue
метод или commitEdit
метод. setValue
метод устанавливает значение в указанный параметр. Параметр может технически быть любым Object
, но средство форматирования должно быть в состоянии преобразовать это в строку. Иначе, текстовое поле не выводит на экран независимой информации.
commitEdit
метод устанавливает значение в любой объект, который определяет средство форматирования, представляется текстом поля. commitEdit
метод автоматически вызывают, когда любое из следующего происходит:
setFocusLostBehavior
метод, чтобы определить различный результат, когда поле теряет фокус.Некоторые средства форматирования могли бы постоянно обновлять значение, представляя потерю бессмысленного фокуса, поскольку значение всегда является тем же самым как, что определяет текст.
Когда Вы устанавливаете значение отформатированного текстового поля, текст поля обновляется, чтобы отразить значение. Точно, как значение представляется, поскольку текст зависит от средства форматирования поля.
Отметьте это хотя JFormattedTextField
class наследовался setText
метод от JTextField
class, Вы обычно не вызываете setText
метод на отформатированном текстовом поле. Если Вы делаете, дисплей поля изменяется соответственно, но значение не обновляется (если средство форматирования поля постоянно не обновляет это).
Чтобы получить текущую стоимость отформатированного текстового поля, используйте getValue
метод. В случае необходимости можно гарантировать, что значение отражает текст, вызывая commitEdit
метод прежде getValue
. Поскольку getValue
метод возвращается Object
, Вы должны бросить это к типу, используемому для значения Вашего поля. Например:
Date enteredDate = (Date)dateField.getValue();
Чтобы обнаружить изменения в значении отформатированного текстового поля, можно зарегистрироваться, свойство изменяют слушателя на отформатированном текстовом поле, чтобы прислушаться к изменениям к свойству "значения". Слушатель изменения свойства берется от FormattedTextFieldDemo
пример:
//The property change listener is registered on each //field using code like this: // someField.addPropertyChangeListener("value", this); /** Called when a field's "value" property changes. */ public void propertyChange(PropertyChangeEvent e) { Object source = e.getSource(); if (source == amountField) { amount = ((Number)amountField.getValue()).doubleValue(); } else if (source == rateField) { rate = ((Number)rateField.getValue()).doubleValue(); } else if (source == numPeriodsField) { numPeriods = ((Number)numPeriodsField.getValue()).intValue(); } double payment = computePayment(amount, rate, numPeriods); paymentField.setValue(new Double(payment)); }
Format
class обеспечивает способ отформатировать уязвимую информацию локали, такую как даты и числа. Средства форматирования, которые убывают от InternationalFormatter
DateFormatter
NumberFormatter
Format
объекты преобразовать между текстом поля и значением. Можно получить a Format
объект, призывая один из методов фабрики DateFormat
NumberFormat
SimpleDateFormat
Одна треть обычно используемое средство форматирования class, MaskFormatter
, не убывает от InternationalFormatter
class и не использует форматы. MaskFormatter
обсуждается в Использовании MaskFormatter.
Можно настроить определенные аспекты формата, когда Вы создаете Format
объект, и другие через специфичный для формата API. Например, DecimalFormat
NumberFormat
и часто возвращаются его методами фабрики, может быть настроен при использовании setMaximumFractionDigits
и setNegativePrefix
методы. Для получения информации об использовании Format
объекты, см. урок
Самый легкий способ связать специализированный формат с отформатированным текстовым полем состоит в том, чтобы создать поле при использовании JFormattedTextField
конструктор, который берет a Format
как параметр. Можно видеть эту ассоциацию в предыдущих примерах кода, которые создают amountField
и rateField
объекты.
MaskFormatter
class реализует средство форматирования, которое определяет точно, какие символы допустимы в каждой позиции текста поля. Например, следующий код создает a MaskFormatter
это позволяет пользователю, чтобы ввести пятиразрядный почтовый индекс:
zipField = new JFormattedTextField( createFormatter("#####")); ... protected MaskFormatter createFormatter(String s) { MaskFormatter formatter = null; try { formatter = new MaskFormatter(s); } catch (java.text.ParseException exc) { System.err.println("formatter is bad: " + exc.getMessage()); System.exit(-1); } return formatter; }
Можно испытать результаты предыдущего кода, работая TextInputDemo
. Нажмите кнопку Launch, чтобы работать, TextInputDemo, используя
GUI программы выводится на экран.
Следующая таблица показывает символы, что можно использовать в маске форматирования:
Символ | Описание |
---|---|
# | Любое допустимое число (Character.isDigit ). |
' (одинарная кавычка) |
Символ ESC, используемый, чтобы выйти из любого из специальных символов форматирования. |
U | Любой символ (Character.isLetter ). Все строчные буквы отображаются на верхний регистр. |
L | Любой символ (Character.isLetter ). Все прописные буквы отображаются на нижний регистр. |
A | Любой символ или число (Character.isLetter или Character.isDigit ). |
? | Любой символ (Character.isLetter ). |
* | Что-либо. |
H | Любой шестнадцатеричный символ (0-9, a-f или A-F). |
Определяя средства форматирования, имейте в виду, что каждый объект средства форматирования может использоваться самое большее одним отформатированным текстовым полем за один раз. У каждого поля должно быть по крайней мере одно средство форматирования, связанное с этим, которого точно каждый используется в любое время.
Можно определить средства форматирования, которые будут использоваться отформатированным текстовым полем несколькими способами:
JFormattedTextField
конструктор, который берет a Format
параметр.JFormattedTextField
конструктор, который берет a JFormattedTextField.AbstractFormatter
параметр.Date
, средство форматирования является a DateFormatter
. Если значение является a Number
, средство форматирования является a NumberFormatter
. Другие типы приводят к экземпляру DefaultFormatter
.PhoneNumber
. Можно установить поля, чтобы использовать фабрику средства форматирования, которая возвращает специализированные средства форматирования для номеров телефона.Можно установить фабрику средства форматирования поля или создавая поле, используя конструктора, который берет параметр фабрики средства форматирования, или вызывая setFormatterFactory
метод на поле. Чтобы создать фабрику средства форматирования, можно часто использовать экземпляр DefaultFormatterFactory
DefaultFormatterFactory
объект позволяет Вам определить средства форматирования, возвращенные, когда значение редактируется, не редактируется, или имеет нулевое значение.
Следующие данные показывают приложение, основанное на FormattedTextFieldDemo
пример, который использует фабрики средства форматирования, чтобы установить многократных редакторов для Количества Ссуды и полей APR. В то время как пользователь редактирует Количество Ссуды, символ $ не используется так, чтобы пользователь не был вынужден ввести это. Точно так же, в то время как пользователь редактирует поле APR, символ % не требуется.
Нажмите кнопку Launch, чтобы работать, FormatterFactoryDemo, используя
Следующий код, который создает средства форматирования и устанавливает их при использовании экземпляров DefaultFormatterFactory
class:
private double rate = .075; //7.5 % ... amountField = new JFormattedTextField( new DefaultFormatterFactory( new NumberFormatter(amountDisplayFormat), new NumberFormatter(amountDisplayFormat), new NumberFormatter(amountEditFormat))); ... NumberFormatter percentEditFormatter = new NumberFormatter(percentEditFormat) { public String valueToString(Object o) throws ParseException { Number number = (Number)o; if (number != null) { double d = number.doubleValue() * 100.0; number = new Double(d); } return super.valueToString(number); } public Object stringToValue(String s) throws ParseException { Number number = (Number)super.stringToValue(s); if (number != null) { double d = number.doubleValue() / 100.0; number = new Double(d); } return number; } }; rateField = new JFormattedTextField( new DefaultFormatterFactory( new NumberFormatter(percentDisplayFormat), new NumberFormatter(percentDisplayFormat), percentEditFormatter)); ... amountDisplayFormat = NumberFormat.getCurrencyInstance(); amountDisplayFormat.setMinimumFractionDigits(0); amountEditFormat = NumberFormat.getNumberInstance(); percentDisplayFormat = NumberFormat.getPercentInstance(); percentDisplayFormat.setMinimumFractionDigits(2); percentEditFormat = NumberFormat.getNumberInstance(); percentEditFormat.setMinimumFractionDigits(2);
Полужирный код выделяет звонки DefaultFormatterFactory
конструкторы. Первый параметр конструктору определяет средство форматирования значения по умолчанию, чтобы использовать для отформатированного текстового поля. Второй параметр определяет средство форматирования дисплея, которое используется, когда у поля нет фокуса. Третий параметр определяет средство форматирования редактирования, которое используется, когда у поля есть фокус. Код не использует четвертый параметр, но если бы он сделал, то четвертый параметр определил бы нулевое средство форматирования, которое используется, когда значение поля является нулем. Поскольку никакое нулевое средство форматирования не определяется, средство форматирования значения по умолчанию используется, когда значение является нулем.
Код настраивает средство форматирования, которое использует percentEditFormat
создавая подкласс NumberFormatter
class. Этот подкласс переопределяет valueToString
и stringToValue
методы NumberFormatter
так, чтобы они преобразовали выведенное на экран число в значение, фактически используемое в вычислениях, и преобразовали значение в число. Определенно, выведенное на экран число является 100 раз фактическим значением. Причина состоит в том, что процентный формат, используемый средством форматирования дисплея автоматически, выводит на экран текст как 100 раз значение, таким образом, соответствующее средство форматирования редактора должно вывести на экран текст в том же самом значении. FormattedTextFieldDemo
пример не должен заботиться об этом преобразовании, потому что этот демонстрационный пример использует только один формат и для дисплея и для редактирования.
Можно найти код для всей программы в
.FormatterFactoryDemo.java
Следующие таблицы приводят некоторые из обычно используемых API для того, чтобы использовать отформатированные текстовые поля.
Класс или Интерфейс | Цель |
---|---|
JFormattedTextField | Подкласс JTextField это поддерживает произвольные значения форматирования. |
|
Суперкласс всех средств форматирования для JFormattedTextField . Средство форматирования осуществляет политики редактирования и политики навигации, обрабатывает строку к преобразованиям объекта, и управляет JFormattedTextField по мере необходимости осуществлять требуемую политику. |
|
Суперкласс всех фабрик средства форматирования. Каждый JFormattedTextField использует фабрику средства форматирования, чтобы получить средство форматирования, которое лучше всего соответствует состоянию текстового поля. |
|
Фабрика средства форматирования обычно используется. Обеспечивает средства форматирования, основанные на деталях, таких как состояние фокуса и передаваемые параметры. |
|
Подкласс JFormattedTextField.AbstractFormatter это форматирует произвольные объекты при использовании toString метод. |
|
Подкласс DefaultFormatter это форматирует и редактирует строки, используя указанную символьную маску. (Например, семиразрядные номера телефона могут быть определены при использовании "###-####".) |
|
Подкласс DefaultFormatter это использует экземпляр java.text.Format обработать преобразование в и от a String . |
|
Подкласс InternationalFormatter это поддерживает числовые форматы при использовании экземпляра NumberFormat . |
|
Подкласс InternationalFormatter это поддерживает форматы даты при использовании экземпляра DateFormat . |
Метод или Конструктор | Цель |
---|---|
|
Создает новое отформатированное текстовое поле. Object параметр, если есть определяет начальное значение поля и заставляет соответствующую фабрику средства форматирования создаваться. Format или AbstractFormatter параметр определяет формат или средство форматирования, которое будет использоваться для поля, и заставляет соответствующую фабрику средства форматирования создаваться. AbstractFormatterFactory параметр определяет фабрику средства форматирования, которая будет использоваться, который определяет, какие средства форматирования используются для поля. |
|
Наборы или получают значение отформатированного текстового поля. Следует бросить тип возврата, основанный на как JFormattedTextField был сконфигурирован. Если средство форматирования еще не было установлено, вызывая setValue устанавливает средство форматирования в один возвращенный фабрикой средства форматирования поля. |
|
Устанавливает объект, который определяет средства форматирования, используемые для отформатированного текстового поля. Объект часто является экземпляром DefaultFormatterFactory class. |
|
Получает средство форматирования отформатированного текстового поля. Средство форматирования часто является экземпляром DefaultFormatter class. |
|
Определяет результат поля, теряющего фокус. Возможные значения определяются в JFormattedTextField как COMMIT_OR_REVERT (значение по умолчанию), COMMIT (фиксация если допустимый, иначе оставьте все тем же самым), PERSIST (ничего не сделайте), и REVERT (измените текст, чтобы отразить значение). |
|
Устанавливает значение в объект, представленный текстом поля, как определено средством форматирования поля. Если текст недопустим, значение остается тем же самым и a ParseException |
|
Возвращает true, если средство форматирования полагает, что текущий текст допустим, как определено средством форматирования поля. |
Метод | Цель |
---|---|
|
Наборы или получают значения, когда редактирования пододвигаются обратно к JFormattedTextField . Если true , commitEdit вызывается после каждого допустимого редактирования. Это свойство false по умолчанию. |
|
Наборы или получают поведение, вставляя символы. Если true , новые символы перезаписывают существующие символы в модели, поскольку они вставляются. Значение по умолчанию этого свойства true в DefaultFormatter (и таким образом в MaskFormatter ) и false в InternationalFormatter (и таким образом в DateFormatter и NumberFormatter ). |
|
Наборы или интерпретируют, позволяют ли отредактированному значению быть недопустимым долго. Часто удобно позволить пользователю ввести недопустимые значения до commitEdit метод предпринимается. DefaultFormatter инициализирует это свойство к true . Из стандартных средств форматирования Swing, только MaskFormatter наборы это свойство к false . |
Эта таблица приводит примеры, которые используют отформатированные текстовые поля и точки туда, где те примеры описываются.
Пример | Где Описано | Примечания |
FormattedTextFieldDemo | Этот раздел | Использование четыре отформатированных текстовых поля. |
SpinnerDemo | Как Использовать Прядильщиков | Настраивает появление отформатированных текстовых полей, используемых двумя прядильщиками. |
Преобразователь | Используя Модели | Каждый ConversionPanel соединяет отформатированное текстовое поле с ползунком. |
TextInputDemo | Этот раздел | Шоу, как использовать текстовые поля, прядильщиков, и отформатированные текстовые поля вместе, и демонстрирует, как использовать MaskFormatter . Включает код для того, чтобы выбрать текст поля, которое только что получило фокус. |
FormatterFactoryDemo | Этот раздел | Изменение на FormattedTextFieldDemo, который использует фабрики средства форматирования, чтобы определить многократные средства форматирования для двух отформатированных текстовых полей. |