En anpassare är en extra dialogruta som användare kan använda till att ändra Java-bönegenskaper. Du kan skapa anpassarklasser för redigering av egenskaper för de Java-bönor du lägger till i den visuella redigeraren.
I en anpassarklass bör gränssnittet java.beans.Customizer implementeras och den bör vara en underordnad klass till java.awt.Component. Vanligen är en anpassare en behållare, till exempel en java.awt.Panel eller javax.swing.JPanel, som innehåller kontroller för att visa och ändra Java-bönegenskaperna. När anpassaren startas med hjälp av verktygsfältsknappen visas deni en dialogruta med knapparna OK och Avbryt.
När en användare öppnar en anpassare får anpassaren den Java-bönaden anpassar som en del av metoden public void setObject(Object bean);. Anpassaren kan då göra ändringar direkt i argumentet.
java.beans.Customizer-gränssnittet har även metoderna public void addPropertyChangeListener(PropertyChangeListener listener); och public void removePropertyChangeListener(PropertyChangeListener listener). Den visuella redigeraren lägger till sig själv som en lyssnare i anpassaren och om anpassaren ska uppdatera utseendet för Java-bönan i designvyn bör den signalera en egenskapsändring genom att anropa lyssnarna med någon av metoderna firePropertyChange(... med valfri uppsättning av argument.
När användaren klickar på OK försöker den visuella redigeraren avgöra vilka ändringar av Java-bönan anpassaren har gjort för att göra motsvarande uppdatering av Java-källkoden. Den visuella redigeraren gör det genom att ta en kopia av alla Java-bönegenskaperna innan anpassaren startas och sedan jämföra dem med egenskaperna när anpassaren är stängd. Om någon egenskap är annorlunda jämfört med kopian (false returneras i equals-metoden) anses den vara ändrad. I syfte att bestämma argumentet till set-metoden för egenskapen skapas egenskapsredigeraren för java.beans.PropertyDescriptor. Sedan anropas den med public void setValue(Object) och public String getJavaInitializationString();. På motsvarande sätt, när du klickar på Avbryt kör den visuella redigeraren en fråga om uppsättningen egenskaper och återställer de som skiljer sig från ursprunglig status, eftersom anpassaren redan har ändrat Java-bönan.
Om anpassaren är ett skal på översta nivån som inte måste köras i en dialogruta, till exempel java.awt.Frame eller javax.swing.JFrame, körs anpassaren som den är. Eftersom den här typen av anpassare ansvarar för sina egna knappar och det inte går att bestämma om den avbröts eller bekräftades körs alltid en fråga när anpassaren stängs för egenskaperna på den översta nivån för att kontrollera om de har ändrats. Om anpassaren avbryter en ändring sker det här, vilket säkerställer att Java-bönegenskaperna återställs till ursprunglig status.
När du har skrivit en anpassare måste den anges för bönbeskrivaren för BeanInfo-klassen för Java-bönan:
public class MyClassBeanInfo extends SimpleBeanInfo { public BeanDescriptor getBeanDescriptor() { return new BeanDescriptor(MyClass.class, MyCustomizer.class); } }