/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.forms.components.rt; import java.awt.Component; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Collections; import java.util.HashSet; import java.util.Set; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; import javax.swing.JComponent; /** * * @author mg */ public class ButtonGroupWrapper extends JComponent { protected ItemListener itemListener = (ItemEvent e) -> { fireItemSelected(e); }; protected ButtonGroup group; protected Set<ItemListener> itemListeners = new HashSet<>(); public ButtonGroupWrapper() { super(); group = new ButtonGroup(); } public ButtonGroupWrapper(ButtonGroup aGroup) { super(); group = aGroup; } public void addItemListener(ItemListener l) { itemListeners.add(l); } public void removeItemListener(ItemListener l) { itemListeners.remove(l); } protected void fireItemSelected(ItemEvent e) { if (e.getItem() instanceof AbstractButton) { AbstractButton ab = (AbstractButton) e.getItem(); if (ab.isSelected()) { itemListeners.stream().forEach((l) -> { l.itemStateChanged(e); }); } } } @Override public Component add(Component comp, int index) { if (comp instanceof AbstractButton) { group.add((AbstractButton) comp); ((AbstractButton) comp).addItemListener(itemListener); } return comp; } @Override public Component add(Component comp) { return add(comp, 0); } @Override public void add(Component comp, Object constraints) { super.add(comp, 0); } @Override public void add(Component comp, Object constraints, int index) { super.add(comp, 0); } @Override public void remove(Component comp) { if (comp instanceof AbstractButton) { ((AbstractButton) comp).removeItemListener(itemListener); group.remove((AbstractButton) comp); } super.remove(comp); } @Override public void remove(int index) { if (index >= 0 && index < group.getButtonCount()) { remove(Collections.list(group.getElements()).get(index)); } else { super.remove(index); } } @Override public void removeAll() { Collections.list(group.getElements()).stream().forEach((ab) -> { group.remove(ab); }); } @Override public int getComponentCount() { return Collections.list(group.getElements()).size(); } @Override public Component getComponent(int index) { if (index >= 0 && index < group.getButtonCount()) { return Collections.list(group.getElements()).get(index); } else { return null; } } public void clearSelection() { group.clearSelection(); } }