Mega Code Archive

 
Categories / Java / Swing JFC
 

Uses reflection to create groups of different types of AbstractButton

// : c14:ButtonGroups.java // Uses reflection to create groups // of different types of AbstractButton. // <applet code=ButtonGroups width=500 height=300></applet> // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.awt.Container; import java.awt.FlowLayout; import java.lang.reflect.Constructor; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JToggleButton; import javax.swing.border.TitledBorder; public class ButtonGroups extends JApplet {   private static String[] ids = { "June", "Ward", "Beaver", "Wally", "Eddie",       "Lumpy", };   static JPanel makeBPanel(Class klass, String[] ids) {     ButtonGroup bg = new ButtonGroup();     JPanel jp = new JPanel();     String title = klass.getName();     title = title.substring(title.lastIndexOf('.') + 1);     jp.setBorder(new TitledBorder(title));     for (int i = 0; i < ids.length; i++) {       AbstractButton ab = new JButton("failed");       try {         // Get the dynamic constructor method         // that takes a String argument:         Constructor ctor = klass             .getConstructor(new Class[] { String.class });         // Create a new object:         ab = (AbstractButton) ctor.newInstance(new Object[] { ids[i] });       } catch (Exception ex) {         System.err.println("can't create " + klass);       }       bg.add(ab);       jp.add(ab);     }     return jp;   }   public void init() {     Container cp = getContentPane();     cp.setLayout(new FlowLayout());     cp.add(makeBPanel(JButton.class, ids));     cp.add(makeBPanel(JToggleButton.class, ids));     cp.add(makeBPanel(JCheckBox.class, ids));     cp.add(makeBPanel(JRadioButton.class, ids));   }   public static void main(String[] args) {     run(new ButtonGroups(), 500, 300);   }   public static void run(JApplet applet, int width, int height) {     JFrame frame = new JFrame();     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.getContentPane().add(applet);     frame.setSize(width, height);     applet.init();     applet.start();     frame.setVisible(true);   } } ///:~