Строковые редакторы свойств Java

Строковые редакторы свойств JavaПростые редакторы свойств работают с текстовыми строками за счет переопределения методов setAsText() и getAsText(). Например, у рассматриваемого здесь компонента ChartBean есть свойство, которое позволяет выбирать один из следующих вариантов для размещения заголовка: слева, справа или по центру. Реализуются эти варианты с помощью такого перечисления:

Конечно, отображаться так как есть, то есть в виде строк с заглавными буквами — LEFT, CENTER, RIGHT — они, во избежание лишних проблем с пользовательским интерфейсом, не должны. Поэтому и определяется редактор свойств, метод getAsText() которого подбирает для отображения строку более приглядного с точки зрения разработчика вида:

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

Естественно, теперь также еще необходимо добавить и метод, преобразующий текстовую строку обратно в значение свойства:

Если мы просто предоставим эти два метода, инспектор свойств будет отображать текстовое поле. Оно будет инициализироваться вызовом метода getAsText, а по завершении выполнения в нем редактирования будет вызываться метод setAsText. Для свойства titlePosition, конечно, такой вариант является далеко не самым подходящим. В его случае будет лучше сделать так, чтобы все действительные значения отображались не в текстовом поле, а в комбинированном окне, как показано ниже:

Строковые редакторы свойств JavaСпециальный редактор свойств в действии

Класс PropertyEditorSupport предоставляет простой механизм для указания того, что должно использоваться комбинированное окно. Все, что требуется — это всего лишь написать метод getTags(), возвращающий массив соответствующих строк:

По умолчанию метод getTags() возвращает значение null, указывающее на то, что текстовое поле является подходящим для редактирования значения свойств.

В случае предоставления метода getTags() методы getAsText() и setAsText() предоставлять все равно нужно. Метод getTags() просто перечисляет строки, которые должны предлагаться пользователю, а методы getAsText() и setAsText() отвечают за преобразование этих строк в тип данных свойства(который может представлять собой строку, целое число, перечисление или еще какой-нибудь совершенно другой тип) и обратно.

И, наконец, еще редакторы свойств должны реализовать метод getJavaInitializationString. С помощью этого метода интегрированной среде разработки можно передавать Java-строку, устанавливающую для свойств его текущее значение, чтобы та использовала ее для автоматической генерации кода. Для рассматриваемого здесь редактора TitlePostitionEditor этот метод должен выглядеть следующим образом:

Он будет возвращать примерно такую строку: com.projavaru.corejava.ChartBean.Position.LEFT.

Испробуйте его в среде NetBeans. В случае редактирования свойств titlePosition среда NetBeans должна вставить следующую строку кода:

В нашей ситуации код выглядит немного громоздко, поскольку ChartBean.Position.class.getName() возвращает строку com.projavaru.corejava.ChartBean$Position. Далее остается только заменить символ $ символом точки и добавить результат вызова toString к значению перечисления.

При наличии у свойства специального редактора< не реализующего метод getJavaInitializationString, среда NetBeans не будет знать, как генерировать код, и потому будет создать set-метод с параметром ???.

Ниже приведен полный код редактора TitlePositionEditor: