Добавление в компонент новых свойств

 

В компонент можно добавить новое свойство. Пусть мы хотим задать свойство titleShift типа int – оно будет задавать высоту нашего заголовка., выбираем в окне Projects… для соответствующего компонента узел Bean Patterns и щелкаем по ним правой клавишей мыши. В появившемся всплывающем меню выбираем Add/Property, после чего в появившемся диалоге вводим имя и тип свойства.

 

Добавление в компонент свойства, слева – обычного, справа - массива

 

Пункты Bound (“связанное свойство”) и Constrained (“стеснённое свойство”) позволяют использовать опцию “Generate Property Change Support” – без её выбора они ни на что не влияют.

Свойства вида Bound – обычные свойства. При отмеченных опциях “Bound” и “Generate Property Change Support” автоматически добавляется код, генерирующий в компоненте событие PropertyChange при изменении свойства компонента. Именно таким образом была ранее создан средой NetBeans код для работы с событием PropertyChange.

Например, если мы добавим целочисленное свойство titleShift (“shift”- сдвиг) вида Bound, задающее сдвиг заголовка по вертикали, в исходный код компонента добавится следующий текст:

 

/**

* Holds value of property titleShift.

*/

private int titleShift;

 

/**

* Getter for property titleShift.

* @return Value of property titleShift.

*/

public int getTitleShift() {

return this.titleShift;

}

 

/**

* Setter for property titleShift.

* @param titleShift New value of property titleShift.

*/

public void setTitleShift(int titleShift) {

int oldTitleShift = this.titleShift;

this.titleShift = titleShift;

propertySupport.firePropertyChange ("titleShift",

new Integer (oldTitleShift),

new Integer (titleShift));

repaint();//добавлено вручную

}

 

Правда, как и в предыдущем случае, в автоматически сгенерированный код сеттера пришлось добавить оператор repaint().

 

Свойства вида Constrained требуют проверки задаваемого значения свойства на принадлежность к области допустимых значений. Если значение не удовлетворяет этому условию, возбуждается исключительная ситуация. При изменении таких свойств порождается событие VetoableChangeEvent. Слово Vetoable происходит от “Veto able” - способный на накладывание ограничения, накладывание вето.

 

При задании свойств - массивов во всплывающем меню, вызываемом правой кнопкой мыши в узле Bean Patterns, следует пользоваться опцией Add/Indexed Property. Например, если мы выбрали параметры так, как указано на правом рисунке, приведённом выше, будет добавлен следующий код:

 

/**

* Holds value of property arr.

*/

private double[] arr;

 

/**

* Indexed getter for property arr.

* @param index Index of the property.

* @return Value of the property at <CODE>index</CODE>.

*/

public double getArr(int index) {

return this.arr[index];

}

 

/**

* Getter for property arr.

* @return Value of property arr.

*/

public double[] getArr() {

return this.arr;

}

 

/**

* Indexed setter for property arr.

* @param index Index of the property.

* @param arr New value of the property at <CODE>index</CODE>.

*/

public void setArr(int index, double arr) {

this.arr[index] = arr;

propertySupport.firePropertyChange ("arr", null, null );

}

 

/**

* Setter for property arr.

* @param arr New value of property arr.

*/

public void setArr(double[] arr) {

double[] oldArr = this.arr;

this.arr = arr;

propertySupport.firePropertyChange ("arr", oldArr, arr);

}

 

После добавления нового свойства следует заново скомпилировать проект (Build main project – F11). При этом, если при визуальном проектировании (Design) выделить компонент jTitledPanel1, его новые свойства появятся в окне jTitledPanel1[JTitledPanel]-Properties/ Properties сразу после компиляции проекта.