Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 07. Компонентная модель в объектно-ориентированном программировании. Технология JavaBeans. Вложенные типы.pptx

.pdf
Скачиваний:
153
Добавлен:
16.03.2015
Размер:
577.69 Кб
Скачать

Связанные свойства

nПоддерживают механизм оповещения об изменениях значений свойств

nОбработчики реализуют интерфейс

PropertyChangeListener и принимают объекты PropertyChangeEvent,

содержащие имя свойства и его старое и новое значения

nИспользуется вспомогательный класс

PropertyChangeSupport

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

21

Бин со связанным свойством

package beans;

import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport;

public class MyBean implements java.io.Serializable { private final PropertyChangeSupport pcs =

new PropertyChangeSupport(this); public void addPropertyChangeListener(

PropertyChangeListener listener) { pcs.addPropertyChangeListener(listener);

}

public void removePropertyChangeListener( PropertyChangeListener listener) {

pcs.removePropertyChangeListener(listener);

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

22

Бин со связанным свойством

public void setMessage(String message) { String old = this.message; this.message = message;

pcs.firePropertyChange("message", old, message);

}

public void setLines(String[] lines) { String[] old = this.lines; this.lines = lines;

pcs.firePropertyChange("lines", old, lines);

}

public void setLines(int index, String line) { String old = this.lines[index]; this.lines[index] = line;

pcs.fireIndexedPropertyChange("lines", index, old, lines);

}

...

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

23

Работа со связанными свойствами

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

24

Контролируемые свойства

nПохожи на связанные свойства, но перед присвоением нового значения оно должно быть проверено обработчиками

nЛюбой обработчик в праве запретить изменение, в этом случае значение свойства останется прежним

nОбработчики реализуют интерфейс

VetoableChangeListener и принимают объекты

PropertyChangeEvent, содержащие имя свойства и его старое и новое значения

nИспользуется вспомогательный класс

VetoableChangeSupport

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

25

Бин с контролируемым свойством

package beans;

import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; import java.beans.VetoableChangeSupport;

...

public class MyBean implements java.io.Serializable { private final VetoableChangeSupport vcs =

new VetoableChangeSupport(this); public void addVetoableChangeListener(

VetoableChangeListener listener) { vcs.addVetoableChangeListener(listener);

}

public void removeVetoableChangeListener( VetoableChangeListener listener) {

vcs.removeVetoableChangeListener( listener );

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

26

Бин с контролируемым свойством

...

public void setMessage(String message) { String old = this.message;

try {

vcs.fireVetoableChange("message", old, message); this.message = message; pcs.firePropertyChange("message", old, message);

} catch (PropertyVetoException e) { this.message = old;

}

}

...

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

27

Графические компоненты

nЕсли компоненты содержит средства визуализации, то его суперкласом должен быть:

java.awt.Component

если создается компонент на базе AWT

javax.swing.JComponent

если создается компонент на базе Swing

nХотя и компоненты AWT, и компоненты Swing являются компонентами JavaBeans, не рекомендуется смешивать их в одном контейнере

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

28

Графический бин

package beans;

import java.beans.*; import javax.swing.*; import java.awt.*;

public class MyBean

extends JComponent

implements java.io.Serializable { protected void paintComponent(Graphics g) {

g.setColor(getForeground());

int height = g.getFontMetrics().getHeight(); if (message != null) {

g.drawString(message, 0, height);

}

}

...

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

29

Графический бин

...

public void setMessage(String message) { String old = this.message;

try {

vcs.fireVetoableChange("message", old, message); this.message = message; pcs.firePropertyChange("message", old, message); repaint();

}catch (PropertyVetoException e) { this.message = old;

}

}

...

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

30