//Métodos para acceder al array de propiedades completo public <PropertyType>[] getDe acuerdo con estos patrones las herramientas de programación saben que nuestro Bean contiene una propiedad indexada.(); public void set<PropertyName>( [] value); //Métodos para acceder a valores individuales public <PropertyType> get (int index); public void set<PropertyName>(int index, value);
El Bean OurListBox ilustra como utilizar las propiedades indexadas. OurListBox desciende de la clase List para proporcionar un Bean que presenta al usuario una lista de elecciones: Choices que se puede proporcionar y diseñar durante el diseñó. Aquí tienes una ilustración de un ejemplar de OurListBox :
OurListBox expone el item indexado con los siguientes métodos accesores:
public void setItems(String[] indexprop) {
String[] oldValue=fieldIndexprop;
fieldIndexprop=indexprop;
populateListBox();
support.firePropertyChange("items",oldValue, indexprop);
}
public void setItems(int index, String indexprop) {
String[] oldValue=fieldIndexprop;
fieldIndexprop[index]=indexprop;
populateListBox();
support.firePropertyChange("Items",oldValue, fieldIndexprop);
}
public String[] getItems() {
return fieldIndexprop;
}
public String getItems(int index) {
return getItems()[index];
}
Cuando un item es seleccionado por uno de los métodos setItems(), OurListBox se puebla con el contenido de un array String.
La exposición de las propiedades indexadas es casi tan fácil como la de las propiedades sencillas. Sin embargo, escribir un editor de propiedades indexadas requiere escribir un editor de propiedades personalizado.
Implementar IndexPropertyEditor es lo mismo que implementar cualquier editor de propiedades personalizado:
public class IndexPropertyEditor extends Panel
implements PropertyEditor, Action Listener {
Se puede utilizar la clase PropertyEditorSupport, utilizando una subclase o como clase interna.
itemsprop.setPropertyEditorClass(IndexPropertyEditor.class);
private PropertyChangeSupport support =
new PropertyChangeSupport(this);
Proporciona la habilidad de que los objetos registren su interés en ser notificados cuando una propiedad es editada:
public void addPropertyChangeListener(PropertyChangeListener l) {
support.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
support.removePropertyChangeListener(l);
}
Y dispara un evento de cambio de propiedad a dichos oyentes:
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == addButton) {
listBox.addItem(textBox.getText());
textBox.setText("");
support.firePropertyChange("", null, null);
}
else if (evt.getSource()== textBox) {
listBox.addItem(textBox.getText());
textBox.setText("");
support.firePropertyChange("",null,null);
}
...
}
IndexPropertyEditor mantiene listbox como una copia de OurListBox. Cuando se hace un cambio en listbox, se dispara un evento de cambio de propiedad a todos los oyentes.
Cuando una hoja de propiedades, que está registrada como un oyente de IndexPropertyEditor, recibe un evento de cambio de propiedad desde IndexPropertyEditor, llama a IndexPropertyEditor.getValue() para recuperar los ítems nuevos o cambiados para actualizar el Bean.