Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое |
Компонентное программирование
12.4. Добавление в компонент новых свойств
В компонент можно добавить новое свойство. Пусть мы хотим задать свойство 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 сразу после компиляции проекта.