09. Java GUI Examples (Part 3)
GUI Examples and Exercises
GUI Examples and Exercises
Exercise 9.1
Exercise 9.1
Example Program for Exercise 9.1
// EXAMPLE 9.1 JAVA CODE AND EXERCISE 9.1 (SEE BELOW) import java.awt.event.*; import java.awt.*; import javax.swing.*; public class TryCheckBoxes extends JFrame { private JCheckBox chBoxA= new JCheckBox("A"); private JCheckBox chBoxB= new JCheckBox("B"); private JCheckBox chBoxC= new JCheckBox("C"); private JLabel labelA=new JLabel("A is ON "); private JLabel labelB=new JLabel("B is ON "); private JLabel labelC=new JLabel("C is ON"); public TryCheckBoxes(){ super("Try CheckBoxes"); // puts "Try CheckBoxes in title bar of JFrame setLayout(new FlowLayout()); // sets JFrame layout chBoxA.addItemListener(new CheckBoxAHandler()); chBoxB.addItemListener(new CheckBoxBHandler()); chBoxC.addItemListener(new CheckBoxCHandler()); labelA.setVisible(false); // make label invisible labelB.setVisible(false); // make label invisible labelC.setVisible(false); // make label invisible // put all components into JFrame add(chBoxA); add(chBoxB); add(chBoxC); add(labelA); add(labelB); add(labelC); } // end constructor public static void main( String [] args ){ TryCheckBoxes tcb =new TryCheckBoxes(); tcb.setSize(155, 150); tcb.setVisible(true); tcb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // end main // inner classes for listener classes class CheckBoxAHandler implements ItemListener { public void itemStateChanged( ItemEvent e ){ if( chBoxA.isSelected() ) labelA.setVisible(true); else labelA.setVisible(false); } // end itemStateChanged for check box A } // end CheckBoxAHandler listener class class CheckBoxBHandler implements ItemListener { public void itemStateChanged( ItemEvent e ){ if( e.getStateChange() == ItemEvent.SELECTED ) // another way to check if selected labelB.setVisible(true); else labelB.setVisible(false); } // end itemStateChanged for check box B } // end CheckBoxBHandler listener class class CheckBoxCHandler implements ItemListener { public void itemStateChanged( ItemEvent e ){ labelC.setVisible(chBoxC.isSelected()); // BEST WAY } // end itemStateChanged for check box C } // end CheckBoxCHandler listener class } // end class TryCheckBoxes
/* EXERCISE 9.1 Run the program above.
THEN change it to have another JCheckBox for "D", and another JLabel for "D is ON".
Be sure to put them in JFrame, and add another listener inner class for "D" which makes the "D" JLabel visible or
invisible depending on the check box.
*/
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Exercise_9_1_TryCheckBoxes extends JFrame
{
private JCheckBox chBoxA = new JCheckBox("A");
private JCheckBox chBoxB = new JCheckBox("B");
private JCheckBox chBoxC = new JCheckBox("C");
private JCheckBox chBoxD = new JCheckBox("D");
private JLabel labelA = new JLabel("A is ON ");
private JLabel labelB = new JLabel("B is ON ");
private JLabel labelC = new JLabel("C is ON ");
private JLabel labelD = new JLabel("D is ON");
public Exercise_9_1_TryCheckBoxes()
{
super("Exercise 9.1: Try CheckBoxes"); // puts "Try CheckBoxes in title bar of JFrame
setLayout(new FlowLayout()); // sets JFrame layout
chBoxA.addItemListener(new CheckBoxAHandler());
chBoxB.addItemListener(new CheckBoxBHandler());
chBoxC.addItemListener(new CheckBoxCHandler());
chBoxD.addItemListener(new CheckBoxDHandler());
labelA.setVisible(false); // make label invisible
labelB.setVisible(false); // make label invisible
labelC.setVisible(false); // make label invisible
labelD.setVisible(false); // make label invisible
// put all components into JFrame
add(chBoxA);
add(chBoxB);
add(chBoxC);
add(chBoxD);
add(labelA);
add(labelB);
add(labelC);
add(labelD);
} // end constructor
public static void main( String [] args )
{
Exercise_9_1_TryCheckBoxes tcb = new Exercise_9_1_TryCheckBoxes();
tcb.setSize(200, 200);
tcb.setVisible(true);
tcb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Important - always required
} // end main
// inner classes for listener classes
class CheckBoxAHandler implements ItemListener
{
public void itemStateChanged( ItemEvent e )
{
if( chBoxA.isSelected() ) // One way to check if selected
labelA.setVisible(true);
else
labelA.setVisible(false);
} // end itemStateChanged for check box A
} // end CheckBoxAHandler listener class
class CheckBoxBHandler implements ItemListener
{
public void itemStateChanged( ItemEvent e )
{
if( e.getStateChange() == ItemEvent.SELECTED ) // another way to check if selected
labelB.setVisible(true);
else
labelB.setVisible(false);
} // end itemStateChanged for check box B
} // end CheckBoxBHandler listener class
class CheckBoxCHandler implements ItemListener
{
public void itemStateChanged( ItemEvent e )
{
labelC.setVisible(chBoxC.isSelected()); // BEST WAY
} // end itemStateChanged for check box C
} // end CheckBoxCHandler listener class
class CheckBoxDHandler implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
labelD.setVisible(chBoxD.isSelected());
}
}
} // end class Exercise_9_1_TryCheckBoxes
Exercise 9.2
Example Program for Exercise 9.2
// EXAMPLE 9.2 JAVA CODE AND EXERCISE 9.2 (BELOW) import java.awt.*;// doesn't include sub-packages import java.awt.event.*;// need to import for events import javax.swing.*; public class FrameProgram extends JFrame { private static int TFSIZE = 30; private static int TRIMSIZE = 20; private JComboBox comboBox; // a drop-down menu private JButton trimBtn; private JButton clearBtn; private JTextField outText; private StringBuilder outSB= new StringBuilder(); public FrameProgram(String [] strArray){ super("Frame Program"); // create JComboBox, putting in strings from parameter comboBox = new JComboBox(strArray); comboBox.addActionListener(new JComboBoxHandler()); //make a listener object, register it outText=new JTextField(TFSIZE);// about 30 chars visible outText.setEditable(false); // user can’t change it, program can JButtonHandler jbh = new JButtonHandler(); // create listener object using inner class trimBtn = new JButton("Trim"); // create a button with "Trim" written on it trimBtn.addActionListener(jbh); // register the jbh object as listener on trimBtn clearBtn = new JButton("Clear");// create a button with "Clear" written on it clearBtn.addActionListener(jbh);// register the jbh object as listener on clearBtn setLayout(new FlowLayout());//need layout for JFrame add(comboBox); // adds JComboBox to JFrame add(outText); // adds JTextfield to JFrame add(trimBtn); // adds 1st JButton to JFrame add(clearBtn); // adds 2nd JButton to JFrame } // end constructor public static void main( String[] args ){ FrameProgram fp =new FrameProgram(new String []{ "First", "Second", "Third", "Fourth", "Fifth"}); fp.setSize(400, 200); fp.setVisible(true); fp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // end main class JComboBoxHandler implements ActionListener { public void actionPerformed(ActionEvent e){ String chosenStr; chosenStr = (String) comboBox.getSelectedItem(); outSB.insert(0, chosenStr); outText.setText(outSB.toString()); } // end actionPerformed } // end JComboBoxHandler inner class class JButtonHandler implements ActionListener {//SAME FOR EACH BUTTON // EXAMPLE OF USING ONE LISTENER FOR BOTH BUTTONS public void actionPerformed(ActionEvent e){ Object source = e.getSource(); // get the object that triggered event if( source == trimBtn ){ // if it's the trim button outSB.setLength(TRIMSIZE); outText.setText(outSB.toString()); }else // added another if to allow more buttons to handle if( source == clearBtn ){ // if it's the clear button outSB.setLength(0); outText.setText(""); } // end if clearBtn } // end actionPerformed } // end JButtonHandler inner class } // end class FrameProgram
/*
EXERCISE 9.2 Run the program shown above.
- THEN change it to have another JButton with "Reverse" on the button, which will reverse the StringBuilder and
- put back in the JTextField AND add a JComboBox with "10", "20", and "30" choices for changing the trim size to 10, 20 or 30.
Be sure to put them in the JFrame, change the JButtonHandler method to have another condition for the Reverse button
- and add a new inner class for handling the JComboBox (see example 1 used in Exercise 1).
Hint: Use the parseInt static method in the Integer class to convert from a String to an int.
//EXAMPLE 9.2 JAVA CODE AND EXERCISE 9.2 (BELOW)
*/
import java.awt.*;// doesn't include sub-packages
import java.awt.event.*;// need to import for events
import javax.swing.*;
public class Exercise_9_2_FrameProgram extends JFrame
{
private static int TFSIZE = 30;
private static int TRIMSIZE = 20; // Not needed any more - changed to dropdown selection from user
private static final String [] A_TRIMSIZE = new String []{"10", "20", "30"};
private JComboBox comboBox; // a drop-down menu
private JComboBox comboBox_TrimSize; // a second drop-down menu for Trim Size
private JButton trimBtn;
private JButton clearBtn;
private JButton reverseBtn;
private JTextField outText;
private StringBuilder outSB = new StringBuilder();
public Exercise_9_2_FrameProgram(String [] strArray)
{
super("Exercise 9.2: Frame Program");
// create JComboBox, putting in strings from parameter
comboBox = new JComboBox(strArray);
comboBox.addActionListener(new JComboBoxHandler()); //make a listener object, register it
comboBox_TrimSize = new JComboBox(A_TRIMSIZE);
//comboBox_TrimSize.addActionListener(new JComboBox_TrimSizeHandler()); // Not needed since only want to trim string when user click Trim button, so no action is required
outText = new JTextField(TFSIZE);// about 30 chars visible
outText.setEditable(false); // user can’t change it, program can
JButtonHandler jbh = new JButtonHandler(); // create listener object using inner class
trimBtn = new JButton("Trim"); // create a button with "Trim" written on it
trimBtn.addActionListener(jbh); // register the jbh object as listener on trimBtn
clearBtn = new JButton("Clear"); // create a button with "Clear" written on it
clearBtn.addActionListener(jbh); // register the jbh object as listener on clearBtn
reverseBtn = new JButton("Reverse");
reverseBtn.addActionListener(jbh);
setLayout(new FlowLayout()); //need layout for JFrame
add(comboBox); // adds JComboBox to JFrame
add(comboBox_TrimSize);
add(outText); // adds JTextfield to JFrame
add(trimBtn); // adds 1st JButton to JFrame
add(clearBtn); // adds 2nd JButton to JFrame
add(reverseBtn); // Reverse Button
} // end constructor
public static void main( String[] args )
{
Exercise_9_2_FrameProgram fp = new Exercise_9_2_FrameProgram(new String []{"First", "Second", "Third", "Fourth", "Fifth"});
fp.setSize(400, 200);
fp.setVisible(true);
fp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} // end main
class JComboBoxHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String chosenStr;
chosenStr = (String) comboBox.getSelectedItem();
outSB.insert(0, chosenStr);
outText.setText(outSB.toString());
} // end actionPerformed
} // end JComboBoxHandler inner class
class JComboBox_TrimSizeHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// No code is required here for this event
} // end actionPerformed
} // end JComboBoxHandler inner class
class JButtonHandler implements ActionListener
{ // SAME FOR EACH BUTTON
// EXAMPLE OF USING ONE LISTENER FOR BOTH BUTTONS
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource(); // get the object that triggered event
if( source == trimBtn )
{ // if it's the trim button
int i_TrimLength = Integer.parseInt((String)comboBox_TrimSize.getSelectedItem());
outSB.setLength(i_TrimLength);
outText.setText(outSB.toString());
}
else if(source == reverseBtn)
{
outSB.reverse();
outText.setText(outSB.toString());
}
else // added another if to allow more buttons to handle
{
if( source == clearBtn )
{ // if it's the clear button
outSB.setLength(0);
outText.setText("");
} // end if clearBtn
}
} // end actionPerformed
} // end JButtonHandler inner class
} // end class Exercise_9_2_FrameProgram