Mi ricordo solo adesso che non posso allegare cartelle zippate ma solo immagini (peccato però!!!).
Allora il codice è questo (sono 4 file)
1 classe:
codice:
package MyPack;
public class Pulizia extends AbstractModelObject{
public Pulizia (MetodoPulizia metpuliz){
setMetodoUtilizzato(metpuliz);
}
public enum MetodoPulizia {
MANUALE("olio di gomito"),
MECCANICO("con motore elettrico") ;
private String description;
//constructor
private MetodoPulizia (String description) {
this.description = description;
}
//add a getter for description
public String getDescription(){
return description;
}
}
private MetodoPulizia metodoUtilizzato;
public MetodoPulizia getMetodoUtilizzato() {
return this.metodoUtilizzato;
}
public void setMetodoUtilizzato(MetodoPulizia metpul) {
MetodoPulizia oldMetodo = getMetodoUtilizzato() ;
this.metodoUtilizzato = metpul;
firePropertyChange("metodoUtilizzato", oldMetodo, this.metodoUtilizzato);
}
}
2 classe: Il converter
codice:
package MyPack;
import org.jdesktop.beansbinding.Converter;
import MyPack.Pulizia.MetodoPulizia;
public class EnumToBooleanConverter extends Converter <MetodoPulizia, Boolean>{
private MetodoPulizia o;
public EnumToBooleanConverter () {}
public EnumToBooleanConverter (MetodoPulizia o) {
this.o = o;
}
@Override
public Boolean convertForward(MetodoPulizia arg0) {
return (o != null && o.equals(arg0)) ? Boolean.TRUE : Boolean.FALSE;
}
@Override
public MetodoPulizia convertReverse(Boolean arg0) {
return (MetodoPulizia) ((Boolean.TRUE.equals(arg0)) ? o : null);
}
}
3 file - la Classe astratta per gli ascoltatori
codice:
package MyPack;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
/**
* @author lobas_av
*
*/
public abstract class AbstractModelObject {
private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName,PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName,PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName,listener);
}
protected void firePropertyChange(String propertyName, Object oldValue,Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
}
e infine il pannello, (per semplicità ha il metodo main per lanciarlo da solo)
codice:
package MyPack;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JLabel;
import MyPack.Pulizia.MetodoPulizia;
import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.beansbinding.AutoBinding;
import org.jdesktop.beansbinding.Bindings;
import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;
import org.jdesktop.beansbinding.Converter;
import javax.swing.JTextField;
public class PuliziaPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Create the panel.
*/
Pulizia pulizia = new Pulizia(MetodoPulizia.MANUALE);
Converter<MetodoPulizia, Boolean> converterMetodoManuale= new EnumToBooleanConverter(MetodoPulizia.MANUALE);
Converter<MetodoPulizia, Boolean> converterMetodoMeccanico = new EnumToBooleanConverter(MetodoPulizia.MECCANICO);
private final ButtonGroup buttonGroup = new ButtonGroup();
private JRadioButton rdbtnPuiliziaMeccanica = new JRadioButton("Pulizia meccanica");
private JRadioButton rdbtnPuliziaManuale = new JRadioButton("Pulizia manuale");
private final JTextField textField = new JTextField();
public PuliziaPanel() {
pulizia.setMetodoUtilizzato(MetodoPulizia.MECCANICO);
textField.setColumns(10);
setLayout(new MigLayout("", "[][grow][]", "[][][][grow]"));
JLabel lblMetodoUtilizzato = new JLabel("Metodo utilizzato");
add(lblMetodoUtilizzato, "cell 1 0,alignx center");
add(rdbtnPuliziaManuale, "cell 1 1");
buttonGroup.add(rdbtnPuliziaManuale);
add(rdbtnPuiliziaMeccanica, "cell 1 2");
buttonGroup.add(rdbtnPuiliziaMeccanica);
add(textField, "cell 1 3,growx");
initDataBindings();
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new PuliziaPanel();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
protected void initDataBindings() {
BeanProperty<Pulizia, MetodoPulizia> puliziaBeanProperty = BeanProperty.create("metodoUtilizzato");
BeanProperty<JRadioButton, Boolean> jRadioButtonBeanProperty = BeanProperty.create("selected");
AutoBinding<Pulizia, MetodoPulizia, JRadioButton, Boolean> autoBinding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, pulizia, puliziaBeanProperty, rdbtnPuliziaManuale, jRadioButtonBeanProperty);
autoBinding.setConverter(converterMetodoManuale);
autoBinding.bind();
AutoBinding<Pulizia, MetodoPulizia, JRadioButton, Boolean> autoBinding_1 = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE, pulizia, puliziaBeanProperty, rdbtnPuiliziaMeccanica, jRadioButtonBeanProperty);
autoBinding_1.setConverter(converterMetodoMeccanico);
autoBinding_1.bind();
BeanProperty<Pulizia, String> puliziaBeanProperty_1 = BeanProperty.create("metodoUtilizzato.description");
BeanProperty<JTextField, String> jTextFieldBeanProperty = BeanProperty.create("text");
AutoBinding<Pulizia, String, JTextField, String> autoBinding_2 = Bindings.createAutoBinding(UpdateStrategy.READ, pulizia, puliziaBeanProperty_1, textField, jTextFieldBeanProperty);
autoBinding_2.bind();
}
}