/*
 * [TestJRadioButton.java]
 *
 * Summary: demonstrate the use of javax.swing.ButtonGroup with javax.swing.JRadioButton.
 *
 * Copyright: (c) 2009-2012 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.7+
 *
 * 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;
// 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.

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.err;
import static java.lang.System.out;

/**
 * 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
    {
    // ------------------------------ CONSTANTS ------------------------------

    private static final Color FOREGROUND_FOR_LABEL = new Color( 0x0000b0 );

    // --------------------------- main() method ---------------------------

    /**
     * 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