/* * [TestJRadioButton.java] * * Summary: demonstrate the use of javax.swing.ButtonGroup with javax.swing.JRadioButton. * * Copyright: (c) 2009-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2009-01-01 initial version * 1.1 2011-09-10 notes about Nimbus and opaque */ package com.mindprod.example; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JRadioButton; import javax.swing.SwingUtilities; import javax.swing.UIManager; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import static java.lang.System.*; // Using a ButtonGroup with JRadioButton. // This code lets you select one of three types // of flower with three radio buttons. // The ButtonGroup itself is not visible. // It does not draw a line around the radio buttons, for example. // It just ensures only one option is selected // at an elapsedTime. // It is up to you to layout the radio buttons in some // logical pattern that indicates they belong together. /** * demonstrate the use of javax.swing.ButtonGroup with javax.swing.JRadioButton. * * @author Roedy Green, Canadian Mind Products * @version 1.1 2011-09-10 notes about Nimbus and opaque * @since 2009-01-01 */ public final class TestJRadioButton { private static final Color FOREGROUND_FOR_LABEL = new Color( 0x0000b0 ); /** * Debugging harness for a Frame * * @param args command line arguments are ignored. */ public static void main( String args[] ) { SwingUtilities.invokeLater( new Runnable() { /** * fire up a JFrame on the Swing thread */ public void run() { try { UIManager.setLookAndFeel( "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" ); } catch ( Exception e ) { err.println( "Can't install Nimbus L&F" ); } final JFrame jFrame = new JFrame(); final Container contentPane = jFrame.getContentPane(); final ButtonGroup flowers = new ButtonGroup(); final JRadioButton daffodil = new JRadioButton( "daffodil", true ); daffodil.setForeground( FOREGROUND_FOR_LABEL ); // this modifies the unselected and selected background colour daffodil.setBackground( Color.YELLOW ); // for Nimbus this will be false, though it is usually true. out.println( daffodil.isOpaque() ); // override Nimbus setting so setBackground will take effect. daffodil.setOpaque( true ); daffodil.setFont( new Font( "Dialog", Font.BOLD, 15 ) ); final JRadioButton impatiens = new JRadioButton( "impatiens", false ); final JRadioButton sunflower = new JRadioButton( "sunflower", false ); final ItemListener flowerListener = new ItemListener() { public void itemStateChanged( ItemEvent e ) { // warning flowers.getSelection() returns a ButtonModel not the // JRadioButton. // Beware, you will get two events for each change, one to // remove a selection // and one to add a new one. out.println( "daffodil:" + daffodil.isSelected() ); out.println( "impatiens:" + impatiens.isSelected() ); out.println( "sunflower:" + sunflower.isSelected() ); /* ... */ } }; daffodil.addItemListener( flowerListener ); impatiens.addItemListener( flowerListener ); sunflower.addItemListener( flowerListener ); // Note you don't attach the Listener to the ButtonGroup. // add JRadioButtons to ButtonGroup flowers.add( daffodil ); flowers.add( impatiens ); flowers.add( sunflower ); // add JRadioButton to the JFrame contentPane.add( daffodil, BorderLayout.WEST ); contentPane.add( impatiens, BorderLayout.CENTER ); contentPane.add( sunflower, BorderLayout.EAST ); jFrame.setSize( 400, 100 ); jFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); jFrame.validate(); jFrame.setVisible( true ); } } ); } // end main } // end class