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

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

public enum Position {LEFT, CENTER, RIGHT};

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

class TitlePositionEditor extends PropertyEditorSupport
{
public String getAsText()
{
int index = ((CharBean.Position) getValue().ordinal();
return tags[index];
}
...
private String[] tags = { "Left", "Center", "Right" };
}

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

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

public void setAsText(String s)
{
int index = Arrays.asList(tags).indexOf(s);
if(index>=0) setValue(ChartBean.Position.values() [index]);
}

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

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

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

public String[] getTags() {return tags;}

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

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

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

public String getJavaInitializationString()
{
return ChartBean.Position.class.getName().replace('$', '.') + "." + getValue();
}

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

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

chartBean1.setTitlePosition(com.projavaru.corejava.ChartBean.Position.LEFT);

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

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

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

package com.projavaru.corejava;

import java.beans.*;
import java.util.*;

public class TitlePositionEditor extends PropertyEditorSupport
{
public String[] getTags()
{
retunr tags;
}
public String getJavaInitializationString()
{
return ChartBean.Position.class.getName().replace('$', '.') + "." + getValue();
}
public String getAsText()
{
int index = ((ChartBean.Position) getValue()).ordinal();
return tags[index];
}
public void setAsText(String s)
{
int index = Arrays.asList(tags).indexOf(s);
if(index>=0) setValue(ChartBean.Position.values()[index]);
}
private String[] tags = { "Left", "Center", "Right" };
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *