import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class Radio extends JPanel implements ItemListener { //*1 Our own object, made of a JPanel, holding JRadioButtons and a ButtonGroup public Radio () { // Border around our JPanel setBorder (new LineBorder(Color.BLUE, 1)); //*1 ButtonGroup g = new ButtonGroup (); //*4 ButtonGroup makes them behave as radio buttons JRadioButton rb = new JRadioButton ("I", false); //*2 Create buttons add (rb); //*3 Add button to our panel g.add (rb); //*5 Also add button to our ButtonGroup rb.addItemListener (this); //*6 Make entire Radio be listener for all buttons, use getItem() to disambiguate rb = new JRadioButton ("II", true); //*2 add (rb); //*3 g.add (rb); //*5 rb.addItemListener (this); //*6 rb = new JRadioButton ("III", false); //*2 add (rb); //*3 g.add (rb); //*5 rb.addItemListener (this); //*6 rb = new JRadioButton ("IV", false); //*2 add (rb); //*3 g.add (rb); //*5 rb.addItemListener (this); //*6 } public void itemStateChanged (ItemEvent e) { // Reports every select or deselect, we filter out if (e.getStateChange()==ItemEvent.SELECTED) { System.out.println ("Radio: " + ((JRadioButton)e.getItem()).getText()); //*6 } } }