В компонент можно добавить новое свойство. Пусть мы хотим задать свойство 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 сразу после компиляции проекта.