public class ProjectValueWrapper { PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); private ProjectValue value; private Set<ProjectValueWrapper > list; public ProjectValueWrapper (String text) { value = new ProjectValue(); list = new HashSet<ProjectValueWrapper>(); } public void addPropertyChangeListener(PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(listener); } public String getText() { return value.getText(); } public void setText(String text) { String t = getText(); value.setText(text); changeSupport.firePropertyChange("text", t, text); } public Set<ProjectValueWrapper> getList() { if (list == null) return null; return new HashSet<ProjectValueWrapper>(list); } public void setList(Set<ProjectValueWrapper> list) { if (list != null) list = new HashSet<ProjectValueWrapper>(list); changeSupport.firePropertyChange("list", this.list, this.list = list); } public boolean hasListeners(String propertyName) { return changeSupport.hasListeners(propertyName); } }