GUI Chapter 10 Graphics context and objects Creating a window based application JFrame, JTextField, JButton Containers and Controls Graphics commands Layout Managers Event Handlers
Terms GIU component container coordinates graphics context
Types of interfaces Console applications Using print and Scanner A simple GUI Using JoptionPane A complete GUI using a Frame Can be created using AWT Can be create using Swing
The swing versus the AWT AWT part of JDK v1 Mapped to platform specific components Heavyweight Swing introduced in V2 Platform independent components Lightweight
Components JButton tnOK = new JButton(“OK”); JLabel tnOK = new JLabel(“OK”); JTextField tfNAME = new JTextField(“Enter Name”); JCheckBox cbOK = new JTextBox(“OK”); JComboBox cmb = new JComboBox(new String[] {“Red”,”Green”,Blue”});
The Class chart JComponent AbstractButton Jbutton JToggleButton JCheckBox JTextComponent JTextField JLabel JPanel … many others …
Classes Container Classes JFrame JDialog JApplet JPanel Helper Classes Graphics, Color, Font, FontMetrics LayoutManager
Frames Public class myframe { public static void main(String[] args) { JFrame yframe = new JFrame(“MyFrame”); myframe.setsize(300,300); myframe.setvisible=true; myframe.setdefaultcloseoperation(Jframe.EXIT_ON_C LOSE); }
Frames with components (limited example) Import javax.swing.*; Public class myframe { public static void main(String[] args) { JFrame yframe = new JFrame(“MyFrame”); java.awt.Container mycnt = frame.getContentPane(); Jbutton btOK = new JButton(“OK”); mycnt.add(btOK); myframe.setsize(300,300); myframe.setvisible=true; myframe.setdefaultcloseoperation(Jframe.EXIT_ON_CLOSE); }
Getting the screen size Dimension ScrS = Toolkit.getDefaultToolkit().getScreenSize(); int wid = screensize.width; int hgt = screensize.height; This can be used to center or dynamically size frame. Frame.setlocation(x,y); Frame.setwidth(wid); Frame.sethight(hgt);
Layout Managers Use to determine how components will be positioned on the frame or panel. To create and apply a layout manager to a component. LayoutManager Lm = new FlowLayout(); Frame.setLayout(LM);
Type of layout managers Flow Grid Border Others …. Properties.setHGap(10);.setVGap(10);.setAlignment(FlowLayout.RIGHT);
Creating a subclass of Frame Import javax.swing.*; Import java.awt.*; Public class theframe extends Jframe { Public theframe() { Container mycnt = getContentPane(); mtcnt.setLayout(new FlowLayout()); Jbutton btOK = new JButton(“OK”); mycnt.add(btOK); } public static void main(String[] args) { theframe myframe = new theframe(); myframe.settitle(“Frame subclass”); myframe.setsize(300,300); myframe.setvisible=true; myframe.setdefaultcloseoperation(Jframe.EXIT_ON_CLOSE); }
The color Class Color c = new Color(100,100,100) The color constructor expects: Color(R,G,B) Red, Green, Blue btnOK.setForeground( c );
The Font class Font ( name, Style, size) Font F = new Font(“Serif”, Font.BOLD + Font.ITALIC, 12); btnOK.setFont(F);
Drawing shapes drawline drawrect fillrect drawarc fillarc drawstring draw3drect drawroundedrect drawpolygon
Making a window based application import javax.awt.*; import javax.swing.*; public class MyWindow extends JFrame { public MyWindow() { super(“My Window”); setSize(400,200); setVisible(true); } public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); g.fillRect(20,20,100,100); } public static void main( String args[]) { MyWindow app1=new MyWindow(); app1.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); }
Event Handlers Event-driven programming A change in the state of a GUI component triggers a call to an event handler method Event source is the object that the user interacts with to trigger the event. Event handler is an object with an event handler method designed to handle a specific event type.
Implementing Event Handlers 1 – Code a class for the event handler. The class must implement the correct listener. This can be the same class file as out application runs in. 2 – Create an event handler object from the class. 3 – Register the handler object with the GUI component.
Event Handlers – Step 1 Create a class to implement the Handler public class MyProgram extends JFrame implements ActionListener { … /** This method will be invoked when a button is clicked */ public void actionPerformed(ActionEvent e) { System.out.println("The " + e.getActionCommand() + " button is " + "clicked at\n " + new java.util.Date(e.getWhen())); } … }
Event Handlers – Step 2 Create event handler object //ButtonListener btListener = new ButtonListener(); This step may be skipped if we are using the Program class as the event object.
Event Handlers – Step 3 Register the event handler object with the source object. In this example a button. … private JButton jbtOk = new JButton("OK"); jbtOk.addActionListener(this); …
Example import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TestActionEvent extends JFrame implements ActionListener { // Create two buttons private JButton jbtOk = new JButton("OK"); private JButton jbtCancel = new JButton("Cancel"); public TestActionEvent() { // Set the window title setTitle("TestActionEvent"); // Set FlowLayout manager to arrange the components inside the frame getContentPane().setLayout(new FlowLayout()); // Add buttons to the frame getContentPane().add(jbtOk); getContentPane().add(jbtCancel); // Create a listener object //ButtonListener btListener = new ButtonListener(); // Register listeners jbtOk.addActionListener(this); jbtCancel.addActionListener(this); } /** Main method */ public static void main(String[] args) { TestActionEvent frame = new TestActionEvent(); frame.setDefaultCloseOperation(JFrame.E XIT_ON_CLOSE); frame.setSize(100, 80); frame.setVisible(true); } /** This method will be invoked when a button is clicked */ public void actionPerformed(ActionEvent e) { System.out.println("The " + e.getActionCommand() + " button is " + "clicked at\n " + new java.util.Date(e.getWhen())); }
Getting and Setting the value of a TextField Getting a value from a Textfield String s; s= TheTextField.getText(); Setting the value in a TextField TheTextField.setText(“A value”);
Summary AWT and Swing API Containers – JFrame Labels, TextFields and Buttons Layout Managers Graphics commands Handling Events Layout Managers