
Лекции Java / 07. Компонентная модель в объектно-ориентированном программировании. Технология JavaBeans. Вложенные типы.pptx
.pdf
Связанные свойства
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 |