1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late...
Transcript of 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late...
![Page 1: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/1.jpg)
1
Review
• Polymorphism
– “having many forms”
– Helps build extensible systems
• Dynamic/late binding
– Implements polymorphic processing of objects
– Use superclass reference to refer to subclass object
– Program chooses “correct” method in subclass at execution
• Abstract Class
• Interface
![Page 2: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/2.jpg)
2
Introduction to Graphics
• An appealing feature of Java• Made easy by many standard library calls that are
not included in many languages• With graphics one can easily draw shapes, one can
control colors and fonts, one can organize the screen in a user-friendly way.
![Page 3: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/3.jpg)
3
awt and swing
• Most of the GUI classes are provided in Java by the Abstract Windowing Tools (AWT) package (java.awt).
• AWT was expanded with the Swing classes (javax.swing) in Java 2 platform– Swing classes provide alternative components that have
more functionality than AWT
– We shall prefer using swing
• Part of the java class hierarchy structure– Classes of AWT such Color, Font, Graphics, Component are derived from the Object superclass.
![Page 4: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/4.jpg)
4
Creating a window
• Top-level containers– Window
• Jdialog• Jframe
– Panel• Japplet
• User-interface components are arranged by placing them in a Swing Container object– E.g. Jbutton, Jlabel, Jlist
![Page 5: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/5.jpg)
5
Dialog by JOptionPane
• Several Swing component classes can directly instantiate and display dialogs. E.g. JoptionPane
import javax.swing.*;
class MessageDialog {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,"Hi, how are you?");
JOptionPane.showMessageDialog(null, "Show second dialog message.");
}
}
![Page 6: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/6.jpg)
6
Dialog by JOptionPane
• Another JOptionPane example
import javax.swing.JOptionPane;public class DialogDemo {
public static void main(String[] args) {
String ans;
ans = JOptionPane.showInputDialog(null,
"Speed in miles per hour?");
double mph = Double.parseDouble(ans);
double kph = 1.621 * mph;
JOptionPane.showMessageDialog(null, "KPH = " + kph);
System.exit(0);
}
}
![Page 7: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/7.jpg)
7
Frame Windows: An Example
import javax.swing.*;
public class EmptyFrameViewer{
public static void main(String[] args) {
JFrame frame = new JFrame(); final int FRAME_WIDTH = 300; final int FRAME_HEIGHT = 300; frame.setBounds(100, 100, FRAME_WIDTH, FRAME_HEIGHT); frame.setTitle("An Empty Frame"); //Makes the frame perform the given action when it
closes. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//make a frame appear on the screen after creating it (default is invisible)
frame.setVisible(true); }
}
![Page 8: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/8.jpg)
8
Jframe: Commonly used constructors and methods
• public JFrame() or public JFrame(String title)– Creates a frame with an optional title.
• setBounds(int x,int y,int width,int height)• setSize(int width,int height)• setBackground(Color c)• setVisible(boolean b):• pack()
– Resizes the frame to fit the components inside it
• setTitle(String name)• getTitle()• setResiable(boolean m)
![Page 9: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/9.jpg)
9
Applets Review
• Can be executed by any web browser that supports Java, or Java AppletViewer– Not a stand-alone application (cf. JFrame)
– sizing and creation of the window is done in HTML instead of Java
– In this course, always use the JDK appletviewer • appletviewer ShowColors.html
// this is the file EmptyAppletViewer.html
<html>
<applet code = "EmptyAppletViewer.class" width = "400" height = "130">
</applet>
</html>
![Page 10: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/10.jpg)
10
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class EmptyAppletViewer extends JApplet { public void paint( Graphics g ) { // call superclass's paint method super.paint( g );
// add further implementations here }}
Applets : A basic Example
![Page 11: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/11.jpg)
11
Java’s Coordinate System Review
• Scheme for identifying all points on screen• Upper-left corner has coordinates (0,0)• Coordinate point composed of x-coordinate and y-
coordinate• Java coordinate system. Units are measured in
pixels.X axis
Y axis
(0, 0)
(x, y)
+x
+y
![Page 12: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/12.jpg)
12
Swing Overview
• Swing GUI components– Package javax.swing– Components originate from AWT (package java.awt)
– Contain look and feel• Appearance and how users interact with program
![Page 13: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/13.jpg)
13
The class hierarchy
https://www3.ntu.edu.sg/home/ehchua/programming/java/J4a_GUI_2.html
![Page 14: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/14.jpg)
14
Swing Overview (cont.)
• Class Component– Contains method paint for drawing Component onscreen
• Class Container– Collection of related components
– Contains method add for adding components
• Class JComponent– Pluggable look and feel for customizing look and feel
– Shortcut keys (mnemonics)
– Common event-handling capabilities
![Page 15: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/15.jpg)
15
The Component Class
• A superclass for many classes in AWT• Its method paint() takes a Graphics object as
an argument: public void paint (Graphics g)
• Derived classes from Component will override paint() to perform various graphics operations with the help of the g Graphics object passed as a parameter.
public abstract class Component extends Object implements ImageObserver, MenuContainer, Serializable
![Page 16: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/16.jpg)
16
Graphics Context and Graphics Objects
• Graphics context– Enables drawing on screen– Graphics object manages graphics context
• Controls how information is drawn
– Class Graphics is abstract• Cannot be instantiated
• Contributes to Java’s portability
– Class Component method paint takes Graphics object
public void paint( Graphics g )
– Called through method repaint
![Page 17: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/17.jpg)
17
Color Control
• Class Color– Defines methods and constants for manipulating colors
– Colors are created from red, green and blue components• RGB values
– Color Class static constants• Orange, pink, cyan, magenta, yellow, black, white, gray,
lightGray, darkGray, red, green, blue
– Color methods and color-related Graphics methods.• public Color( float r, float g, float b )
• public int getRed() // Color class
• public int getGreen() // Color class
• public int getBlue()
• public Color getColor()
• public void setColor( Color c )
![Page 18: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/18.jpg)
18
import java.awt.*;import java.awt.event.*;// Java extension packagesimport javax.swing.*;public class ShowColors extends JFrame { // constructor sets window's title bar string and dimensions public ShowColors() { super( "Using colors" ); // this will put a title on the frame bar setSize( 400, 130 ); // size in pixels show(); } // draw rectangles and Strings in different colors public void paint( Graphics g ) { // call superclass's paint method super.paint( g );
// setColor, fillRect, drawstring, getColor, getRed etc // are methods of Graphics // set new drawing color using integers for R/G/B g.setColor( new Color( 255, 0, 0 ) ); g.fillRect( 25, 25, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 40 ); // set new drawing color using floats g.setColor( new Color( 0.0f, 1.0f, 0.0f ) ); g.fillRect( 25, 50, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 65 );
Graphics and Color Example: A Jframe Application
![Page 19: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/19.jpg)
19
// set new drawing color using static Color objects g.setColor( Color.blue ); g.fillRect( 25, 75, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 90 ); // display individual RGB values Color color = Color.magenta; g.setColor( color ); g.fillRect( 25, 100, 100, 20 ); g.drawString( "RGB values: " + color.getRed() + ", " + color.getGreen() + ", " + color.getBlue(), 130, 115 ); } // execute application public static void main( String args[] ) { ShowColors application = new ShowColors(); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); }} // end class ShowColors
![Page 20: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/20.jpg)
20
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ShowColors extends JApplet { public void paint( Graphics g ) { // call superclass's paint method super.paint( g ); // set new drawing color using integers g.setColor( new Color( 255, 0, 0 ) ); g.fillRect( 25, 25, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 40 ); // set new drawing color using floats g.setColor( new Color( 0.0f, 1.0f, 0.0f ) ); g.fillRect( 25, 50, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 65 ); // set new drawing color using static Color objects g.setColor( Color.blue ); g.fillRect( 25, 75, 100, 20 ); g.drawString( "Current RGB: " + g.getColor(), 130, 90 ); // display individual RGB values Color color = Color.magenta; g.setColor( color ); g.fillRect( 25, 100, 100, 20 ); g.drawString( "RGB values: " + color.getRed() + ", " + color.getGreen() + ", " + color.getBlue(), 130, 115 ); }} // end class ShowColors
Graphics and Color Example: A Japplet Application
![Page 21: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/21.jpg)
21
The class hierarchy of Swing's JComponents
https://www3.ntu.edu.sg/home/ehchua/programming/java/J4a_GUI_2.html
![Page 22: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/22.jpg)
22
Graphic User Interface (GUI) Components
• A Visual Guide to Swing Components
![Page 23: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/23.jpg)
23
Most of the Swing Components supports these features
• Text and icon. • Keyboard short-cut • Tool tips: display when the mouse-pointer pauses
on the component.• Look and feel: customized appearance and user
interaction for the operating platform. • Localization: different languages for different
locale.
![Page 24: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/24.jpg)
24
Some Basic GUI Components
Component Description JLabel An area where uneditable text or icons can be displayed. JTextField An area in which the user inputs data from the keyboard. The area can
also display information. JButton An area that triggers an event when clicked. JCheckBox A GUI component that is either selected or not selected. JComboBox A drop-down list of items from which the user can make a selection
by clicking an item in the list or possibly by typing into the box. JList An area where a list of items is displayed from which the user can
make a selection by clicking once on any element in the list. Double-clicking an element in the list generates an action event. Multiple elements can be selected.
JPanel A container in which components can be placed.
Some basic GUI components.
![Page 25: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/25.jpg)
25
JLabel
• Label– Provide text on GUI
– Defined with class JLabel– Can display:
• Single line of read-only text
• Image
• Text and image
![Page 26: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/26.jpg)
26
1 // LabelTest.java 2 // Demonstrating the JLabel class. 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class LabelTest extends JFrame {12 private JLabel label1, label2, label3;13 14 // set up GUI15 public LabelTest()16 {17 super( "Testing JLabel" );18 19 // get content pane and set its layout20 Container container = getContentPane();21 container.setLayout( new FlowLayout() );22 23 // JLabel constructor with a string argument24 label1 = new JLabel( "Label with text" );25 label1.setToolTipText( "This is label1" );26 container.add( label1 );27 28 // JLabel constructor with string, Icon and29 // alignment arguments30 Icon bug = new ImageIcon( "bug1.gif" );31 label2 = new JLabel( "Label with text and icon",32 bug, SwingConstants.LEFT );33 label2.setToolTipText( "This is label2" );34 container.add( label2 );35
Declare three JLabels
Create first JLabel with text “Label with text”
Create second JLabel with text to left of image
Tool tip is text that appears when user moves cursor over JLabel
Building of GUI is done in the constructor
![Page 27: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/27.jpg)
27
36 // JLabel constructor no arguments37 label3 = new JLabel();38 label3.setText( "Label with icon and text at bottom" );39 label3.setIcon( bug );40 label3.setHorizontalTextPosition( SwingConstants.CENTER );41 label3.setVerticalTextPosition( SwingConstants.BOTTOM );42 label3.setToolTipText( "This is label3" );43 container.add( label3 );44 45 setSize( 275, 170 );46 setVisible( true );47 }48 49 // execute application50 public static void main( String args[] )51 { 52 LabelTest application = new LabelTest();53 54 application.setDefaultCloseOperation(55 JFrame.EXIT_ON_CLOSE );56 }57 58 } // end class LabelTest
Create third JLabel with text below image
![Page 28: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/28.jpg)
28
Using images in GUI: ImageIcon
• javax.swing.ImageIcon class models an image icon.
• The ImageIcon class implements javax.swing.Icon interface, and hence, often upcasted and referenced as Icon.
• An ImageIcon is a fixed-size picture, typically small, and mainly used for decorating GUI components.
• To construct an ImageIcon, provide the image filename or URL.
• Image file type of GIF, PNG, JPG and BMP are supported.
![Page 29: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/29.jpg)
29
Layout Management
– Each container has a layout manager that directs the arrangement of its components
– Components are added to a container which uses a layout manager to place them
– Three useful layout managers are:
1) Border layout2) Flow layout3) Grid layout
Page 29
![Page 30: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/30.jpg)
30
Jframe’s Content Pane
• A JFrame has a content pane which is a Container where you can add components
– Use the getContentPane method to get its reference
Container container= getContentPane();
– Set laylout
container.setLayout( new FlowLayout() );
– Add components to the content pane
container.add( label1 );
Page 30
![Page 31: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/31.jpg)
31
Event-Handling Model
• GUIs are event driven– Generate events when user interacts with GUI
• e.g., moving mouse, pressing button, typing in text field, etc.
• Class java.awt.AWTEvent
![Page 32: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/32.jpg)
32
Some event classes of package java.awt.event
Class name
Key
java.lang.Object
java.awt.AWTEvent
ActionEvent
ItemEvent
AdjustmentEvent
ComponentEvent
java.util.EventObject
ContainerEvent
PaintEvent
FocusEvent
WindowEvent
InputEvent
KeyEvent MouseEventInterface name
![Page 33: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/33.jpg)
33
Event-Handling Model (cont.)
• Event-handling model– Three parts
• Event source
– GUI component with which user interacts
• Event object
– Encapsulates information about event that occurred
• Event listener
– Receives event object when notified, then responds
– Programmer must perform two tasks• Register event listener for event source
• Implement event-handling method (event handler)
![Page 34: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/34.jpg)
34
Event-listener interfaces of package java.awt.event
java.util.EventListener
ActionListener
ComponentListener
AdjustmentListener
ContainerListener
MouseListener
TextListener
ItemListener
FocusListener
KeyListener
MouseMotionListener
WindowListener
C lass name
Key
Interface name
![Page 35: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/35.jpg)
35
JTextField and JPasswordField
• JTextField– Single-line area in which user can enter text
• JPasswordField– Extends JTextField– Hides characters that user enters
![Page 36: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/36.jpg)
36
1 // TextFieldTest.java 2 // Demonstrating the JTextField class. 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class TextFieldTest extends JFrame {12 private JTextField textField1, textField2, textField3;13 private JPasswordField passwordField;14 15 // set up GUI16 public TextFieldTest()17 {18 super( "Testing JTextField and JPasswordField" );19 20 Container container = getContentPane();21 container.setLayout( new FlowLayout() );22 23 // construct textfield with default sizing24 textField1 = new JTextField( 10 );25 container.add( textField1 );26 27 // construct textfield with default text28 textField2 = new JTextField( "Enter text here" );29 container.add( textField2 );30 31 // construct textfield with default text and32 // 20 visible elements and no event handler33 textField3 = new JTextField( "Uneditable text field", 20 );34 textField3.setEditable( false );35 container.add( textField3 );
Declare three JTextFields and one JPasswordField
First JTextField contains empty string
Second JTextField contains text “Enter text here”
Third JTextField contains uneditable text
![Page 37: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/37.jpg)
36 37 // construct textfield with default text38 passwordField = new JPasswordField( "Hidden text" );39 container.add( passwordField );40 41 // register event handlers42 TextFieldHandler handler = new TextFieldHandler();43 textField1.addActionListener( handler );44 textField2.addActionListener( handler );45 textField3.addActionListener( handler );46 passwordField.addActionListener( handler );47 48 setSize( 325, 100 );49 setVisible( true );50 }51 52 // execute application53 public static void main( String args[] )54 { 55 TextFieldTest application = new TextFieldTest();56 57 application.setDefaultCloseOperation( 58 JFrame.EXIT_ON_CLOSE );59 }60 61 // private inner class for event handling62 private class TextFieldHandler implements ActionListener {63 64 // process text field events65 public void actionPerformed( ActionEvent event )66 {67 String string = "";68 69 // user pressed Enter in JTextField textField170 if ( event.getSource() == textField1 )
JPasswordField contains text “Hidden text,” but text
appears as series of asterisks (*)
Every TextFieldHandler instance is an ActionListener
Register GUI components with TextFieldHandler
(register for ActionEvents)
Method actionPerformed invoked when user presses
Enter in GUI field
![Page 38: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/38.jpg)
71 string = "textField1: " + event.getActionCommand();72 73 // user pressed Enter in JTextField textField274 else if ( event.getSource() == textField2 )75 string = "textField2: " + event.getActionCommand();76 77 // user pressed Enter in JTextField textField378 else if ( event.getSource() == textField3 )79 string = "textField3: " + event.getActionCommand();80 81 // user pressed Enter in JTextField passwordField82 else if ( event.getSource() == passwordField ) {83 JPasswordField pwd =84 ( JPasswordField ) event.getSource();85 string = "passwordField: " +86 new String( passwordField.getPassword() );87 }88 89 JOptionPane.showMessageDialog( null, string );90 }91 92 } // end private inner class TextFieldHandler93 94 } // end class TextFieldTest
![Page 39: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/39.jpg)
39
TextFieldTest.java
![Page 40: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/40.jpg)
40
How Event Handling Works
• Two open questions – How did event handler get registered?
• Answer:
– Through component’s method addActionListener– Lines 43-46 of TextFieldTest.java
– How does component know to call actionPerformed?• Answer:
– Event is dispatched only to listeners of appropriate type
– Each event type has corresponding event-listener interface
• Event ID specifies event type that occurred
![Page 41: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/41.jpg)
41
Event registration for JTextField textField1.
textField1
This is the JTextField object. It contains an instance variable o f type EventListenerList c alled listenerList that it inherited from class JComponent.
listenerList
...
handler
This is the TextFieldHandler object that implements ActionListener and defines method actionPerformed.
public void actionPerformed( ActionEvent event ){ // event handled here}
This referenc e is created by the statement
textField1.addActionListener( handler );
![Page 42: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/42.jpg)
42
JButton
• Button– Component user clicks to trigger a specific action
– Several different types• Command buttons
• Check boxes
• Toggle buttons
• Radio buttons
– javax.swing.AbstractButton subclasses• Command buttons are created with class JButton
– Generate ActionEvents when user clicks button
![Page 43: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/43.jpg)
43
The Button Hierarchy
javax.swing.JComponent
javax.swing.AbstractButton
javax.swing.JButton javax.swing.ToggleButton
javax.swing.JCheckBox javax.swing.JRadioButton
![Page 44: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/44.jpg)
44
1 // ButtonTest.java 2 // Creating JButtons. 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class ButtonTest extends JFrame {12 private JButton plainButton, fancyButton;13 14 // set up GUI15 public ButtonTest()16 {17 super( "Testing Buttons" );18 19 // get content pane and set its layout20 Container container = getContentPane();21 container.setLayout( new FlowLayout() );22 23 // create buttons24 plainButton = new JButton( "Plain Button" );25 container.add( plainButton );26 27 Icon bug1 = new ImageIcon( "bug1.gif" );28 Icon bug2 = new ImageIcon( "bug2.gif" );29 fancyButton = new JButton( "Fancy Button", bug1 );30 fancyButton.setRolloverIcon( bug2 );31 container.add( fancyButton );32 33 // create an instance of inner class ButtonHandler34 // to use for button event handling 35 ButtonHandler handler = new ButtonHandler();
Create two references to JButton instances
Instantiate JButton with text
Instantiate JButton with image and rollover image
Instantiate ButtonHandler for JButton event handling
![Page 45: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/45.jpg)
45
36 fancyButton.addActionListener( handler );37 plainButton.addActionListener( handler );38 39 setSize( 275, 100 );40 setVisible( true );41 }42 43 // execute application44 public static void main( String args[] )45 { 46 ButtonTest application = new ButtonTest();47 48 application.setDefaultCloseOperation(49 JFrame.EXIT_ON_CLOSE );50 }51 52 // inner class for button event handling53 private class ButtonHandler implements ActionListener {54 55 // handle button event56 public void actionPerformed( ActionEvent event )57 {58 JOptionPane.showMessageDialog( null,59 "You pressed: " + event.getActionCommand() );60 }61 62 } // end private inner class ButtonHandler63 64 } // end class ButtonTest
Register JButtons to receive events from ButtonHandler
When user clicks JButton, ButtonHandler invokes
method actionPerformed of all registered listeners
![Page 46: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/46.jpg)
46
ButtonTest.java
![Page 47: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/47.jpg)
Some Other Components
• State buttons– On/Off or true/false values– JToggleButton, JCheckBox, and JRadioButton
• JComboBox (drop-down list)– List of items from which user can select
• Jlist– Single selection and Multiple Selection• JTextArea and JTextField– Multiple lines vs. single line
Examples are shown in the last lecture
![Page 48: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/48.jpg)
Mouse Event Handling
• Event-listener interfaces for mouse events– MouseListener– MouseMotionListener– Listen for MouseEvents
![Page 49: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/49.jpg)
MouseListener and MouseMotionListener interface
methodsMouseListener and MouseMotionListener interface methods
Methods of interface MouseListener
public void mousePressed( MouseEvent event ) Called when a mouse button is pressed with the mouse cursor on a component.
public void mouseClicked( MouseEvent event ) Called when a mouse button is pressed and released on a component without moving the mouse cursor.
public void mouseReleased( MouseEvent event ) Called when a mouse button is released after being pressed. This event is always preceded by a mousePressed event.
public void mouseEntered( MouseEvent event ) Called when the mouse cursor enters the bounds of a component.
public void mouseExited( MouseEvent event ) Called when the mouse cursor leaves the bounds of a component.
Methods of interface MouseMotionListener
public void mouseDragged( MouseEvent event ) Called when the mouse button is pressed with the mouse cursor on a component and the mouse is moved. This event is always preceded by a call to mousePressed.
public void mouseMoved( MouseEvent event ) Called when the mouse is moved with the mouse cursor on a component.
MouseListener and MouseMotionListener interface methods.
![Page 50: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/50.jpg)
1 // MouseTracker.java 2 // Demonstrating mouse events. 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class MouseTracker extends JFrame12 implements MouseListener, MouseMotionListener {13 14 private JLabel statusBar;15 16 // set up GUI and register mouse event handlers17 public MouseTracker()18 {19 super( "Demonstrating Mouse Events" );20 21 statusBar = new JLabel();22 getContentPane().add( statusBar, BorderLayout.SOUTH );23 24 // application listens to its own mouse events25 addMouseListener( this );26 addMouseMotionListener( this );27 28 setSize( 275, 100 );29 setVisible( true );30 }31 32 // MouseListener event handlers33 34 // handle event when mouse released immediately after press35 public void mouseClicked( MouseEvent event )
MouseTracker.java
Lines 25-26
Line 35
Register JFrame to receive mouse events
Invoked when user presses and releases mouse button
![Page 51: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/51.jpg)
36 {37 statusBar.setText( "Clicked at [" + event.getX() +38 ", " + event.getY() + "]" );39 }40 41 // handle event when mouse pressed42 public void mousePressed( MouseEvent event )43 {44 statusBar.setText( "Pressed at [" + event.getX() +45 ", " + event.getY() + "]" );46 }47 48 // handle event when mouse released after dragging49 public void mouseReleased( MouseEvent event )50 {51 statusBar.setText( "Released at [" + event.getX() +52 ", " + event.getY() + "]" );53 }54 55 // handle event when mouse enters area56 public void mouseEntered( MouseEvent event )57 {58 JOptionPane.showMessageDialog( null, "Mouse in window" );59 }60 61 // handle event when mouse exits area62 public void mouseExited( MouseEvent event )63 {64 statusBar.setText( "Mouse outside window" );65 }66 67 // MouseMotionListener event handlers68 69 // handle event when user drags mouse with button pressed70 public void mouseDragged( MouseEvent event )
MouseTracker.java
Line 42
Line 49
Line 56
Line 62
Line 70
Invoked when user presses mouse button
Invoked when user releases mouse button after dragging mouse
Invoked when mouse cursor enters JFrame
Invoked when mouse cursor exits JFrame
Invoked when user drags mouse cursor
![Page 52: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/52.jpg)
71 {72 statusBar.setText( "Dragged at [" + event.getX() +73 ", " + event.getY() + "]" );74 }75 76 // handle event when user moves mouse77 public void mouseMoved( MouseEvent event )78 {79 statusBar.setText( "Moved at [" + event.getX() +80 ", " + event.getY() + "]" );81 }82 83 // execute application84 public static void main( String args[] )85 { 86 MouseTracker application = new MouseTracker();87 88 application.setDefaultCloseOperation(89 JFrame.EXIT_ON_CLOSE );90 }91 92 } // end class MouseTracker
MouseTracker.java
Line 77Invoked when user
moves mouse cursor
![Page 53: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/53.jpg)
MouseTracker.java
![Page 54: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/54.jpg)
Adapter Classes
• Adapter class– Implements interface
– Abstract
– Provides default implementation of each interface method
– Used when all methods in interface is not needed
![Page 55: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/55.jpg)
Event adapter classes and the interfaces they implement.
Event adapter class Implements interface ComponentAdapter ComponentListener ContainerAdapter ContainerListener FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener WindowAdapter WindowListener
Event adapter classes and the interfaces they implement.
![Page 56: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/56.jpg)
1 // Painter.java 2 // Using class MouseMotionAdapter. 3 4 // Java core packages 5 import java.awt.*; 6 import java.awt.event.*; 7 8 // Java extension packages 9 import javax.swing.*;10 11 public class Painter extends JFrame {12 private int xValue = -10, yValue = -10;13 14 // set up GUI and register mouse event handler15 public Painter()16 {17 super( "A simple paint program" );18 19 // create a label and place it in SOUTH of BorderLayout20 getContentPane().add(21 new Label( "Drag the mouse to draw" ),22 BorderLayout.SOUTH );23 24 addMouseMotionListener(25 26 // anonymous inner class27 new MouseMotionAdapter() {28 29 // store drag coordinates and repaint30 public void mouseDragged( MouseEvent event )31 {32 xValue = event.getX();33 yValue = event.getY();34 repaint();35 }
Painter.java
Line 24
Lines 30-35
Lines 32-34
Register MouseMotionListener to listen for window’s mouse-motion events
Override method mouseDragged, but not method mouseMoved
Store coordinates where mouse was dragged, then repaint JFrame
![Page 57: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/57.jpg)
36 37 } // end anonymous inner class38 39 ); // end call to addMouseMotionListener40 41 setSize( 300, 150 ); 42 setVisible( true ); 43 }44 45 // draw oval in a 4-by-4 bounding box at the specified46 // location on the window47 public void paint( Graphics g )48 {49 // we purposely did not call super.paint( g ) here to 50 // prevent repainting51 52 g.fillOval( xValue, yValue, 4, 4 );53 }54 55 // execute application56 public static void main( String args[] )57 {58 Painter application = new Painter();59 60 application.addWindowListener(61 62 // adapter to handle only windowClosing event63 new WindowAdapter() {64 65 public void windowClosing( WindowEvent event )66 {67 System.exit( 0 );68 }69
Painter.java
Line 52
Draw circle of diameter 4 where user dragged cursor
![Page 58: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/58.jpg)
70 } // end anonymous inner class71 72 ); // end call to addWindowListener73 }74 75 } // end class Painter
Painter.java
![Page 59: 1 Review Polymorphism –“having many forms” –Helps build extensible systems Dynamic/late binding –Implements polymorphic processing of objects –Use superclass.](https://reader034.fdocuments.us/reader034/viewer/2022042822/56649f045503460f94c17a68/html5/thumbnails/59.jpg)
Readings
• Ch 19