Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8414 / 657 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 12:

Компонентное программирование

< Лекция 11 || Лекция 12: 1234

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

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

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

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

Пункты 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 сразу после компиляции проекта.

< Лекция 11 || Лекция 12: 1234
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.