/**
* @author Igor Kholodov, Bristol Community College
*
* <code>application</code> package is a namespace for the classes
* of the application.
*/
package application;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.text.*;
/**
* <code>FrameRadioButtons</code> is the demo class for UI window
* with two buttons.
*/
public class FrameRadioButtons extends FrameApplication implements ActionListener
{
// ----- Data Attributes ----------
JButton mButChangeColor; // Button that changes background color
JButton mButQuit; // Quit button
JPanel mMainPanel;
GroupRadioButtons mRadioPanel;
Color mSystemColor;
JMenuBar mBar;
JMenu mFile;
JMenuItem mFileOpen;
JMenuItem mFileExit;
JMenu mHelp;
JMenuItem mHelpAbout;
// Menu action listeners
MenuFileExitListener mMenuFileExitListener;
// ----- Operations ----------
/**
* Class constructor takes care of all basic setup steps.
*/
public FrameRadioButtons(String aCaption)
{
super(aCaption);
setMenu();
setGridLayout();
this.setVisible(true);
} // method: FrameRadioButtons
/**
* Confugures menu items
*/
private void setMenu()
{
mMenuFileExitListener = new MenuFileExitListener("Exit");
mBar = new JMenuBar(); //menu bar
this.setJMenuBar(mBar); //add to JFrame
mFile = new JMenu("File"); //top-level menu
mFile.setMnemonic('F');
mBar.add(mFile); //add to menu bar
mFileOpen = new JMenuItem("Open"); //menu items
mFileExit = new JMenuItem("Exit");
mFileExit.setMnemonic('x');
mFileExit.addActionListener(mMenuFileExitListener);
mFile.add(mFileOpen); //add to menu
mFile.addSeparator(); //put in separator
mFile.add(mFileExit);
mHelp = new JMenu("Help");
mFile.setMnemonic('H');
mBar.add(mHelp);
mHelpAbout = new JMenuItem("About");
mHelp.add(mHelpAbout);
}//void setMenu
/**
* Confugures user interface components
*/
private void setGridLayout()
{
// Two panels
mMainPanel = new JPanel();
mRadioPanel = new GroupRadioButtons(this);
// push buttons
mButChangeColor = new JButton("Change Color");
mButQuit = new JButton("Quit");
mButChangeColor.addActionListener(this);
mButQuit.addActionListener(this);
mMainPanel.add(new JLabel("Click the color button twice to see the effect:"));
mMainPanel.add(mButChangeColor);
mMainPanel.add(mButQuit);
mSystemColor = mMainPanel.getBackground();
// Use grid with 2 rows and one column:
this.setLayout(new GridLayout(2, 1));
this.getContentPane().add(mRadioPanel);
this.getContentPane().add(mMainPanel);
this.pack();
} // method: setGridLayout
/**
* Handles push button user clicks
*/
public void actionPerformed(ActionEvent event)
{
Object obj = event.getSource();
if (obj == mButChangeColor)
switchColors();
if (obj == mButQuit)
System.exit(0);
} // method: actionPerformed
/**
* Switches background color from original to custom and back
*/
private void switchColors()
{
if (mSystemColor == mMainPanel.getBackground())
{
mMainPanel.setBackground(mRadioPanel.getColor());
}
else
{
mMainPanel.setBackground(mSystemColor);
}
this.repaint();
} // method: switchColors
} // class: FrameRadioButtons