/Users/petercappello/NetBeansProjects/56-2014/56-2014-lab4/src/Controller.java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

/**
 *
 * @author Pete Cappello
 */
public class Controller extends JPanel
{
    // Control panel
    private final JPanel controlPanel = new JPanel();
        private final JLabel printerLabel = new JLabel( "Printer:" );
        private final JTextField printerTextField = new JTextField(  );

        private final JCheckBox printToFileCheckBox = new JCheckBox( "Print to File" );
        private final JCheckBox twoSidedCheckBox     = new JCheckBox( "2-Sided" );

        private final JRadioButton selectionRadioButton = new JRadioButton( "Selection" );
        private final JRadioButton allRadioButton       = new JRadioButton( "All" );

        private final JLabel printQualityLabel = new JLabel( "Print Quality:" );
        private final JComboBox printQualityComboBox = new JComboBox( new String[] { "High", "Low" } );

        private final JButton okButton     = new JButton( "OK" );
        private final JButton cancelButton = new JButton( "Cancel" );
        private final JButton setupButton  = new JButton( "Setup" );
        private final JButton helpButton   = new JButton( "Help" );
    
    // Console
    private final JPanel consolePanel = new JPanel();
        private final JLabel consoleLabel = new JLabel( " Console:" );
        private final JTextArea consoleTextArea = new JTextArea();
        private final JScrollPane consoleTextAreaScrollPane = new JScrollPane( consoleTextArea );
        
    
    Controller() 
    {   controlPanel.setLayout( new GridLayout( 4, 3 ) );
            // row 1
            printerLabel.setHorizontalAlignment( SwingConstants.RIGHT );
            controlPanel.add( printerLabel ); 
            controlPanel.add( printerTextField );
            controlPanel.add( okButton );
            
            // row 2
            controlPanel.add( printToFileCheckBox ); 
            controlPanel.add( selectionRadioButton );
            controlPanel.add( cancelButton );
            
            // row 3
            controlPanel.add( twoSidedCheckBox ); 
            controlPanel.add( allRadioButton );
            controlPanel.add( setupButton );
            
            // row 4
            printQualityLabel.setHorizontalAlignment( SwingConstants.RIGHT );
            controlPanel.add( printQualityLabel ); 
            controlPanel.add( printQualityComboBox );
            controlPanel.add( helpButton );
            
        consolePanel.setLayout( new BorderLayout() );
            consoleLabel.setVerticalAlignment( SwingConstants.TOP );
            consolePanel.add( consoleLabel, BorderLayout.WEST );
            consolePanel.add( consoleTextAreaScrollPane, BorderLayout.CENTER );
            consoleTextArea.setEnabled( false );
            consoleTextAreaScrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
            consoleTextAreaScrollPane.setPreferredSize( new Dimension( 250, 50 ) );
            
        setLayout( new BorderLayout() );
        add( controlPanel, BorderLayout.CENTER );
        add( consolePanel, BorderLayout.SOUTH );
        
        // set RadioButtonGroup
        ButtonGroup radioButtonGroup = new ButtonGroup();
        radioButtonGroup.add( selectionRadioButton );
        radioButtonGroup.add( allRadioButton );
        
         addListenersToGuiComponents();
    }
    
    /**
     * Associate each Swing component that has associated Event objects
     * with a method that handles that component's Events.
     */
    private void addListenersToGuiComponents() 
    {
        //------------------------------------------
        // contoller TEMPLATE CODE for each action
        //------------------------------------------
        printerTextField.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                printerTextFieldActionPerformed( actionEvent );            }
        });
        
        okButton.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                okButtonActionPerformed( actionEvent );            }
        });
        
        printToFileCheckBox.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                printToFileCheckBoxActionPerformed( actionEvent );            }
        });
        
        selectionRadioButton.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                selectionRadioButtonActionPerformed( actionEvent );            }
        });
        
        cancelButton.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                cancelButtonActionPerformed( actionEvent );            }
        });
        
        twoSidedCheckBox.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                twoSidedCheckBoxActionPerformed( actionEvent );            }
        });
        
        allRadioButton.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                allRadioButtonActionPerformed( actionEvent );            }
        });
        
        setupButton.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                setupButtonActionPerformed( actionEvent );            }
        });
        
        printQualityComboBox.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                printQualityComboBoxActionPerformed( actionEvent );            }
        });
        
        helpButton.addActionListener( new ActionListener() 
        {
            @Override
            public void actionPerformed( ActionEvent actionEvent ) 
            {
                helpButtonActionPerformed( actionEvent );            }
        });
    }
    
    // _____________________________
    //  controller for each action event
    // _____________________________
    void printerTextFieldActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nPrinterTextField: " + printerTextField.getText() );
    }
    
    void okButtonActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nokButton: " + okButton.getText() );
    }
    
    void printToFileCheckBoxActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nprintToFileCheckBox: " + printToFileCheckBox.getText() );
    }
    
    void selectionRadioButtonActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nselectionRadioButton: " + selectionRadioButton.getText() );
    }
    
    void cancelButtonActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\ncancelButton: " + cancelButton.getText() );
    }
    
    void twoSidedCheckBoxActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\ntwoSidedCheckBox: " + twoSidedCheckBox.getText() );
    }
    
    void allRadioButtonActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nallRadioButton: " + allRadioButton.getText() );
    }
    
    void setupButtonActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nsetupButton: " + setupButton.getText() );
    }
    
    void printQualityComboBoxActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nprintQualityComboBox: " + printQualityComboBox.getSelectedItem() );
    }
    
    void helpButtonActionPerformed( ActionEvent actionEvent )
    {
        consoleTextArea.append( "\nhelpButton: " + helpButton.getText() );
    }
}