package com.link_intersystems.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JRadioButtonMenuItem;
public class RadioButtonGroupModel {
private class ButtonActionAdapter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
propertyChangeSupport.firePropertyChange("selectedValue", null,
getSelectionValue());
}
}
private ButtonGroup buttonGroup = new ButtonGroup();
private Map<Object, Object> selectionValueMap = new HashMap<Object, Object>();
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
this);
private ActionListener buttonActionAdapter = new ButtonActionAdapter();
public void add(JRadioButtonMenuItem radioButtonMenuItem,
Object selectionValue) {
buttonGroup.add(radioButtonMenuItem);
selectionValueMap.put(radioButtonMenuItem, selectionValue);
radioButtonMenuItem.addActionListener(buttonActionAdapter);
}
public void remove(JRadioButtonMenuItem radioButtonMenuItem) {
buttonGroup.remove(radioButtonMenuItem);
selectionValueMap.remove(radioButtonMenuItem);
radioButtonMenuItem.removeActionListener(buttonActionAdapter);
}
public Object getSelectionValue() {
Object selectionValue = null;
ButtonModel selection = buttonGroup.getSelection();
if (selection != null) {
Enumeration<AbstractButton> elements = buttonGroup.getElements();
AbstractButton selectedButton = null;
while (elements.hasMoreElements()) {
AbstractButton abstractButton = elements.nextElement();
if (selection.equals(abstractButton.getModel())) {
selectedButton = abstractButton;
break;
}
}
selectionValue = selectionValueMap.get(selectedButton);
}
return selectionValue;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName,
listener);
}
public void setSelected(AbstractButton abstractButton, boolean selected) {
buttonGroup.setSelected(abstractButton.getModel(), selected);
}
}