/**
 * MusicPreference.java
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MusicPreference extends JFrame {
    private JLabel prompt;
    private JLabel message;
    private JRadioButton rapButton, jazzButton, popButton, classicButton;
    private ButtonGroup musicGroup;
   
    private JPanel promptPanel;
    private JPanel selectPanel;

    public MusicPreference()
    {
        super("Listen to the music");

        Container container = getContentPane();
        container.setLayout(new FlowLayout());
       
        // Panel for prompt, default of FlowLayout is fine
        promptPanel = new JPanel();
        prompt = new JLabel("What type of music do you like?");
        promptPanel.add(prompt);
       
        // Panel for selection, want grid for this one, 1 column
        selectPanel = new JPanel();
        selectPanel.setLayout(new GridLayout(0, 1));
       
        // create radio buttons
        rapButton = new JRadioButton("Rap", false);
        jazzButton = new JRadioButton("Jazz", true); // this is default
        popButton = new JRadioButton("Pop", false);
        classicButton = new JRadioButton("Classical", false);

        // create logical relationship between buttons
        musicGroup = new ButtonGroup();
        musicGroup.add(rapButton);
        musicGroup.add(jazzButton);
        musicGroup.add(popButton);
        musicGroup.add(classicButton);

        // register event handlers, each one has its own handler
        rapButton.addItemListener(new MusicButtonHandler("Yo mama"));
        jazzButton.addItemListener(new MusicButtonHandler("Snazzy"));
        popButton.addItemListener(new MusicButtonHandler("Top 40 forever!"));
        classicButton.addItemListener(new MusicButtonHandler("Amadeus Amadeus"));
   
        // Set first message, based on Jazz selection
        message = new JLabel("Snazzy!");
       
        // put components into container
        container.add(promptPanel);
        selectPanel.add(rapButton);
        selectPanel.add(jazzButton);
        selectPanel.add(popButton);
        selectPanel.add(classicButton);
        container.add(selectPanel);
        container.add(message);

        setSize(265,200);
        setVisible(true);
    } // end constructor

    public static void main(String[] args)
    {
        MusicPreference app = new MusicPreference();
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private class MusicButtonHandler implements ItemListener {
        private String msg;
       
        public MusicButtonHandler(String newMessage)
        {
            msg = newMessage;
        }

        public void itemStateChanged(ItemEvent event)
        {
            message.setText(msg);
        }
    } // end class MusicButtonHandler
} // end class MusicPreference