Um personalizador é um diálogo adicional que os usuários podem ativar para alterar as propriedades de Java bean. Você pode criar classes de personalizador para editar as propriedades de Java beans que você inclui no editor.
Uma classe do personalizador deve implementar a interface java.beans.Customizer e também deve ser uma subclasse de java.awt.Component. Geralmente, um personalizador é um contêiner como um java.awt.Panel ou javax.swing.JPanel que contém os controles para permitir que você visualize e manipule suas propriedades do Java bean. Quando o personalizador é ativado a partir do botão da barra de ferramentas, ele é hospedado dentro de um diálogo que tem os botões OK e Cancelar.
Quando um usuário abre um personalizador, o personalizador recebe o Java bean que está personalizando como parte do método public void setObject(Object bean);. O personalizador é, então, capaz de fazer alterações diretamente no argumento.
A interface java.beans.Customizer também tem os métodos public void addPropertyChangeListener(PropertyChangeListener listener); e public void removePropertyChangeListener(PropertyChangeListener listener). O visual editor se incluirá como um listener no personalizador e, se o personalizador tiver que atualizar a aparência do Java bean na visualização Design, ele deverá indicar uma alteração de propriedade chamando seus listeners com qualquer um dos métodos firePropertyChange(... com qualquer conjunto de argumentos.
Quando seu usuário clicar em OK, o visual editor tentará determinar quais alterações o personalizador fez no Java bean para que possa atualizar o código fonte Java. Para fazer isso, o visual editor pega uma cópia de todas as propriedades do Java bean antes do personalizador ser ativado e, em seguida, compara-as com as propriedades quando o personalizador é fechado. Se alguma propriedade for diferente (retornar falso para o método igual), é determinado que ela foi alterada. Para determinar o argumento para o método definido para a propriedade, é criado o editor de propriedade no java.beans.PropertyDescriptor. Em seguida, ele é chamado com public void setValue(Object) e public String getJavaInitializationString();. Do mesmo modo, quando você clica em Cancelar, porque o personalizador já alterou o Java bean, o visual editor consulta o conjunto de propriedades e reconfigura qualquer uma que esteja diferente para seu estado inicial.
Se o personalizador for um shell de nível superior que não exija um diálogo no qual ser executado, como um java.awt.Frame ou javax.swing.JFrame, o visual editor executará o personalizador como está. Como esse tipo de personalizador é responsável por seu próprio conjunto de botões e o visual editor não tem como saber se ele foi cancelado ou confirmado, sempre que o personalizador é fechado, as propriedades de nível superior são consultadas para ver se foram alteradas. Assim, se o personalizador executar um cancelamento ele deve fazer isso, garantindo, desse modo, que as propriedades do Java bean sejam restauradas para seu estado inicial.
Depois de gravar um personalizador, ele deve ser definido no descritor de bean para a classe BeanInfo para o Java bean:
public class MyClassBeanInfo extends SimpleBeanInfo {
public BeanDescriptor getBeanDescriptor() {
return new BeanDescriptor(MyClass.class,
MyCustomizer.class);
}
}