Welcome Back!!! Advanced Java Programming CSE 7345/5345/ NTU 531 Session 7 Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Office Hours: by appt 3:30pm-4:30pm SIC 353 Chantale Laurent-Rice Welcome Back!!! trice75447@aol.com claurent@engr.smu.edu Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Short review Packages • In Java, each class is defined in a single file called ClassName.java. • A package is a name for a set of related classes, • Java uses package names to locate classes at compiletime and at runtime. • Packages can be seen as some kind of libraries in which the classes are grouped. • The difference is that packages provide an additional scope. • Each class file must belong to a package: • Example: • Package dpack; • Package java.awt.event; Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Packages con’t • If no package is given, the class is placed in a default package with no name. • A compilation unit (a file) declares one or more classes. It is a file that may contain several class declarations. It is used as an input for the java Compiler (javac) which outputs a series of class files (bytecodes). • There is a class file for each class in the compilation unit. • At the most one class is declared public. Example: Source code: ClassName.java hello.java Bytecode: className.class hello.class Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Packages con’t • To use the classes, one or more modules in a program can import the entire package with the declaration, such as import graphics.*; • The asterisk indicates to the compiler that it should import all classes in the graphics package. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Standard packages • • • • • • • • • • • • • • • Java.appletJava.awtJava.awt.*- provides the means to create applet provides class-based GUI with windows have subpackages such as java.awt,color, java.awt.font, and java.awt.image Java.beansprovides basic elements for JavaBeans Java.ioprovides I/O Java.langwrapper classes such as: Char, int, Double, String and StringBuffer java.mathmath programmers Java.netnetwork, socket handler, internet utility classes Java.rmiRemote Method Invocation provide support for distributed code controlled by remote interface Java.security- implements security, encryption keys, and certificates Java.sqlimplements of Structured Query Language database fields types and methods Java.textprovide parsers and formatters Java.utilJava Application and applet (Random class, Collection, list, Set) packages container class. Java.util.jar- subpackage w/I java.util. Java.util.zip- subpackage for .zip file compression format. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Packages con’t • To import just one class: import graphics.Rectangle; • It is not correct to import the package itself: import graphics; • Some packages provide one or more subpackages, such as java.util.jar, a subpackage of java.util. • Importing a package does not import any subpackages. • You must do that explicitly using statements like these: • Import java.utils.*; • Import java.utils.jar.*; Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Small Quiz • What happen if you tried to compile and run the following code? 1. public class EqualsTest{ 2. public static void main(String[] args){ 3. Long L = new Long( 7 ); 4. 5. 6. } 7. } if( L.equals( 7L)) System.out.println(“Equal”); else System.out.println(“Not Equal”); a. b. c. d. The program would compile and print “Equal” The program would compile and print “Not Equal”. The compiler would object to line 4. A runtime cast error would occur at line 4. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Small Quiz C. qualsTest.java:5: cannot resolve symbol symbol : method equals (long) location: class java.lang.Long if( L.equals( 7L)) ^ 1 error • The compiler knows that the equals method takes an Object rather than a primitive as input. Because the compiler does not compile answer a, b, d are incorrect. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Small Quiz • What happen if you tried to compile and run the following code? 1. public class EqualsTest{ 2. public static void main(String[] args){ 3. Object A = new Long ( 7 ); 4. Long L = new Long( 7 ); 5. 6. 7. } 8. } if( A.equals( L )) System.out.println(“Equal”); else System.out.println(“Not Equal”); a. b. c. d. The program would compile and print “Equal” The program would compile and print “Not Equal”. The compiler would object to line 5. A runtime cast error would occur at line 5. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Small Quiz a. • Because the Long object created in line 3 does not lose its identity when cast to Object A, so the equals method knows the class is correct and compares the values. • Answer c, d, do not occur because this is the correct form for comparing objects with the equals method. Therefore, they are incorrect. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp interface What compile-time error is generated for the following program? interface B{ void display(); } class D1{ } class D2 implements B{ public void display() { System.out.println("D2"); } } class D3 implements B { public void display() { System.out.println("D3"); } } class InterfaceRefVar{ public static void main(String[] args){ B b; b = new D1(); b.display(); b = new D2(); b.display(); b = new D3(); b.display(); } } Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp interface The line “b = new D1();” generates an error because the types are incompatible for assignment. Class D1 does not implements interface B. • C:\InterfaceRefVar.java:23: incompatible types • found : D1 • required: B • b = new D1(); • ^ • 1 error Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Chapter 10 Getting Started with GUI Programming • GUI Class Hierarchy • Frames – Creating frames, centering frames, adding components to frames • Layout Managers – FlowLayout, GridLayout, BorderLayout • Drawing on Panels – The paintComponent method • Using Colors, Fonts, and Font Metrics • Drawing Geometric Figures – Lines, Rectangles, Ovals, Arcs, and Polygons • Event-Driven Programming – Event Source, Listener, Listener Interface Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp AWT/JFC • AWT was a powerful toolkit when introduced – it was the original driving force behind Java’s popularity – is today’s standard , a limited implementation – not designed to provide a serious, main UI for the needs of many programmers. • Now Swing, which has about four times the number of user interface (UI) components as the AWT – Swing is part of the standard Java distribution Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp AWT (Optional) AWTEvent Font FontMetrics Object Color Graphics Component Container Panel Applet Button Window Frame Label TextField Dialog TextComponent List TextArea Choice CheckBox LayoutManager CheckBoxGroup Canvas MenuComponent Scrollbar Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp MenuItem MenuBar Menu FileDialog Question? • Is JFC and Swing the same? Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp JFC • Many programmer that that JFC and Swing are the same thing, but that’s not so; the JFC contains Swing and quite a number of other items. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp What’s in JFC? Swing- The large UI package Cut and paste- Clipboard support Accessibility features- Aimed at users with disabilities. The desktop Colors features- First introduced in Java 1.1 Java2D- Improved color, image, and text support Printing- Originally enabled in Java 1.1 Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Class AbstractButton ButtonGroup What’s in Swing? Description Abstract superclass for Swing buttons Encapsulates a mutually exclusive set of buttons ImageIcon Encapsulates an icon JApplet The Swing version of Applet JButton The Swing push button class JCheckBox The Swing check box class JComboBox Encapsulates a combo box JLabel The Swing version of a label JRadioButton The Swing version of a radio button JScrollPane Encapsulates a scrollable window JTable Encapsulates a table-based control JTextField The Swing version of a text field Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, JTree Encapsulates a tree-based control IBM Corp GUI Class Hierarchy (Swing) Dimension Font Classes in the java.awt package LayoutManager 1 Heavyweight FontMetrics Object Color Panel Applet JApplet Window Frame JFrame Dialog JDialog Graphics Component Container * Swing Components in the javax.swing package JComponent Lightweight Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp . JComponent JCheckBoxMenuItem AbstractButton JMenuItem JMenu JButton JRadioButtonMenuItem JToggleButton JCheckBox JRadioButton JEditorPane JComponent JTextComponent JTextField JPasswordField JTextArea JLabel JList JComboBox JMenuBar JPanel JOptionPane JScrollBar JTabbedPane JFileChooser JPopupMenu JSeparator JSlider JRootPane JPane JProgressBar JToolBar JSplitPane JTable JTree JInternalFrame JToolTip JLayeredPane JTableHeader JColorChooser Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp JScrollPane JApplets • Fundamental to Swing is the JApplet class, which extends Applet. • Applets that use Swing must be subclasses of JApplet. • JApplet is rich with functionality that is not found in Applet. • For Example: • JApplet support various “panes”, such as the content pane, the glass pane, and the root pane. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Frames • Frame is a window that is not contained inside another window. Frame is the basis to contain other user interface components in Java GUI applications. • The Frame class can be used to create windows. • For Swing GUI programs, use Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, JFrame class to create IBM Corp UI Components Frame Pull-down Menus Applet Panel User Interface Components (UI) Panel Panel User Interface Components User Interface Components Panel Panel User Interface Components User Interface Components Panel Panel Panel Panel UI UI UI panel Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Pull-down Menus Creating Frames import javax.swing.*; public class MyFrame { public static void main(String[] args) { JFrame frame = new JFrame("Test Frame"); frame.setSize(400, 300); frame.setVisible(true); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); } } NOTE: You must have JDK 1.3 or higher to run the slides. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Run Centering Frames By default, a frame is displayed in the upper-left corner of the screen. To display a frame at a specified location, you can use the setLocation(x, y) method in the JFrame class. This method places the upperleft corner of a frame at location (x, y). Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Centering Frames, cont. (0, 0) Screen (x, y) Frame getHeight() screenHeight getWidth() screenWidth Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Adding Components into a Frame // Add a button into the frame frame.getContentPane().add( new JButton("OK")); Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp NOTE The content pane is a subclass of Container. The statement in the preceding slide can be replaced by the following two lines: Container container = frame.getContentPane(); container.add(new JButton("OK")); You may wonder how a Container object is It O’Neil, isSteven created when a Liang,created. Oreilly, Herbert Schildt, Joseph Holzner, IBM Corp Layout Managers • Java’s layout managers provide a level of abstraction to automatically map your user interface on all window systems. • The UI components are placed in containers. Each container has a layout manager to arrange the UI components within the container. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Kinds of Layout Managers • FlowLayout (Chapter 10) • GridLayout (Chapter 10) • BorderLayout (Chapter 10) • CardLayout (Chapter 12) • GridBagLayout (Chapter 12) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.1 Testing the FlowLayout Manager The components are arranged in the container from left to right in the order in which they were added. When one row becomes filled, a new row is started. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp FlowLayout Constructors • public FlowLayout(int align, int hGap, int vGap) Constructs a new FlowLayout with a specified alignment, horizontal gap, and vertical gap. The gaps are the distances in pixel between components. • public FlowLayout(int alignment) Constructs a new FlowLayout with a specified alignment and a default gap of five pixels for both horizontal and vertical. • public FlowLayout() Constructs a new FlowLayout with a default center alignment and a default gap of five pixels for both horizontal and vertical. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.2 Testing the GridLayout Manager The GridLayout manager arranges components in a grid (matrix) formation with the number of rows and columns defined by the constructor. The components are placed in the grid from left to right starting with the first row, then the second, and so on. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp GridLayout Constructors • public GridLayout(int rows, int columns) Constructs a new GridLayout with the specified number of rows and columns. • public GridLayout(int rows, int columns, int hGap, int vGap) Constructs a new GridLayout with the specified number of rows and columns, along with specified horizontal and vertical gaps between components. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.3 Testing the BorderLayout Manager The BorderLayout manager divides the container into five areas: East, South, West, North, and Center. Components are added to a BorderLayout by using the add method. add(Component, constraint), where constraint is BorderLayout.EAST, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.NORTH, or BorderLayout.CENTER. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.3, cont. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Using Panels as Containers • Panels act as smaller containers for grouping user interface components. • It is recommended that you place the user interface components in panels and place the panels in a frame. You can also place panels in a panel. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.4 Testing Panel This example uses panels to organize components. The program creates a user interface for a Microwave frame oven.A textfield p2 A button 12 buttons p1 Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing on Panels JPanel can be used to draw graphics (including text) and enable user interaction. To draw in a panel, you create a new class that extends JPanel and override the paintComponent method to tell the panel how to draw things. You can then display strings, draw geometric shapes, and view images on the panel. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing on Panels, cont. public class DrawMessage extends JPanel { /** Main method */ public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new DrawMessage()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); frame.setSize(300, 200); frame.setVisible(true); } /** Paint the message */ public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("Welcome toHolzner, Java!", 40, 40); Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven } IBM Corp Drawing on Panels, cont. (0, 0) x (x, 0) y (0, y) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp (x, y) NOTE The Graphics class is an abstract class for displaying figures and images on the screen on different platforms. The Graphics class is implemented on the native platform in the JVM. When you use the paintComponent method to draw things on a graphics context g, this g is an instance of a concrete subclass of the abstract Graphics class for the specific platform. The Graphics class encapsulates the platform details and enables you to Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, draw IBM Corp things uniformly without NOTE Whenever a component is displayed, a Graphics object is created for the component. The Swing components use the paintComponent method to draw things. The paintComponent method is automatically invoked to paint the graphics context when the component is first displayed or whenever the component needs to be redisplayed. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Invoking super.paintComponent(g) NOTE To draw things, normally you create a subclass of JPanel and override its paintComponent method to tell the system how to draw. In fact, you can draw things on any GUI component. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp The Color Class You can set colors for GUI components by using the java.awt.Color class. Colors are made of red, green, and blue components, each of which is represented by a byte value that describes its intensity, ranging from 0 (darkest shade) to 255 (lightest shade). This is known as the RGB model. Color c = new Color(r, g, b); r, g, and b specify a color by its red, green, and blue components. Example: Color c = new Color(228, 100, 255); Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Setting Colors You can use the following methods to set the component’s background and foreground colors: setBackground(Color c) setForeground(Color c) Example: setBackground(Color.yellow); setForeground(Color.red); Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp The Font Class Font myFont = Font(name, style, size); Example: Font myFont = new Font("SansSerif ", Font.BOLD, 16); Font myFont = new Font("Serif", Font.BOLD+Font.ITALIC, 12); Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Finding All Available Font Names GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontnames = e.getAvailableFontFamilyNames(); for (int i = 0; i < fontnames.length; i++) System.out.println(fontnames[i]); Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Setting Fonts public void paint(Graphics g) { Font myFont = new Font("Times", Font.BOLD, 16); g.setFont(myFont); g.drawString("Welcome to Java", 20, 40); //set a new font g.setFont(new Font("Courier", Font.BOLD+Font.ITALIC, 12)); g.drawString("Welcome to Java", 20, 70); } Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp The FontMetrics Class public void paint(Graphics g) { g.getFontMetrics(Font f); or g.getFontMetrics(); } Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Get FontMetrics • public int getAscent() • public int getDescent() • public int getLeading() • public int getHeight() • public int stringWidth(String str) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.5 Using FontMetrics • Objective: Display “Welcome to Java” in SansSerif 20-point bold, centered in the frame. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp messagePanel stringWidth getHeight() stringAscent Welcome to Java getWidth() Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.5, cont. JPanel JFrame -char token +getToken MessagePanel +setToken +paintComponet -xCoordinate: int +mouseClicked -yCoordinate: int -centered: boolean -message: String -char token 1 1 +getMessage(): String +getXCoordinate(): int +getYCoordinate(): int +isCentered(): boolean +setMessage(message: String): void +setXCoordinate(x: int): void +setYCoordinate(y: int): void +setCentered(centered: boolean): void +paintComponent(g: Graphics): void +getPerferredSize(): Dimension +getMinimumSize(): Dimension Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp +getToken TestFontMetrics +setToken +paintComponet +mouseClicked Drawing Geometric Figures • Drawing Lines • Drawing Rectangles • Drawing Ovals • Drawing Arcs • Drawing Polygons Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Lines drawLine(x1, y1, x2, y2); (x1 , y1) (x2 , y2) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Rectangles • drawRect(x, y, w, h); • fillRect(x, y, w, h); (x, y) h w Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Rounded Rectangles • drawRoundRect(x, y, w, h, aw, ah); • fillRoundRect(x, y, w, h, aw, ah); (x, y) ah/2 aw/2 h w Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Ovals • drawOval(x, y, w, h); • fillOval(x, y, w, h); (x, y) h w Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Arcs • drawArc(x, y, w, h, angle1, angle2); • fillArc(x, y, w, h, angle1, angle2); Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Polygons int[] x = {40, 70, 60, 45, 20}; int[] y = {20, 40, 80, 45, 60}; g.drawPolygon(x, y, x.length); g.fillPolygon(x, y, x.length); (x[0], y[0]) (x[1], y[1]) (x[3], y[3]) (x[4], y[4]) (x[2], y[2]) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.6 Drawing a Clock • Objective: Use drawing and trigonometric methods to draw a clock showing the specified hour, minute, and second in a frame. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Clock xEnd = xCenter + handLength sin() yEnd = yCenter - handLength cos() Since there are sixty seconds in one minute, the angle for the second hand is second (2/60) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Clock, cont. xEnd = xCenter + handLength sin() yEnd = yCenter - handLength The position of the minute hand is cos() determined by the minute and second. The exact minute value comined with seconds is minute + second/60. For example, if the time is 3 minutes and 30 seconds. The total minutes are 3.5. Since there are sixty minutes in one hour, the angle for the minute hand is (minute + second/60) (2/60) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Drawing Clock, cont. xEnd = xCenter + handLength sin() yEnd = yCenter - handLength cos() Since one circle is divided into twelve hours, the angle for the hour hand is (hour + minute/60 + second/(60 60))) (2/12) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Event-Driven Programming • Procedural programming is executed in procedural order. • In event-driven programming, code is executed upon activation of events. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Events • An event can be defined as a type of signal to the program that something has happened. • The event is generated by external user actions such as mouse movements, mouse button clicks, and keystrokes, or by the operating system, such as a timer. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Event Information • id: A number that identifies the event. • target: The source component upon which the event occurred. • arg: Additional information about the source components. • x, y coordinates: The mouse pointer location when a mouse movement event occurred. • clickCount: The number of consecutive clicks for the mouse events. For other events, it is zero. • when: The time stamp of the event. • key: The key that was pressed or released. Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Event Classes EventObject AWTEvent ActionEvent ContainerEvent AdjustmentEvent FocusEvent ComponentEvent InputEvent ItemEvent PaintEvent TextEvent WindowEvent ListSelectionEvent Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp MouseEvent KeyEvent Selected User Actions User Action Clicked on a button Changed text Double-clicked on a list item Selected or deselected an item with a single click Selected or deselected an item Source Object Event Type Generated JButton ActionEvent JTextComponent TextEvent JList ActionEvent JList ItemEvent JComboBox ItemEvent Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp The Delegation Model EventObject User action Generate an event Notify listener Trigger an event Source Object Register a listener object Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Listener Object Event Handler Selected Event Handlers Event Class Listener Interface Listener Methods (Handlers) ActionEvent ItemEvent WindowEvent ActionListener ItemListener WindowListener ContainerEvent ContainerListener actionPerformed(ActionEvent) itemStateChanged(ItemEvent) windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) componentAdded(ContainerEvent) componentRemoved(ContainerEvent) Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.7 Handling Simple Action Events • Objective: Display two buttons OK and Cancel in the window. A message is displayed on the console to indicate which button is clicked, when a button is clicked. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.8 Handling Window Events Objective: Demonstrate handling the window events. Any subclass of the Window class can generate the following window events: window opened, closing, closed, activated, deactivated, iconified, and deiconified. This program creates a frame, listens to the window events, and displays a message to indicate the occurring event. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp Example 10.9 Multiple Listeners for a Single Source Objective: This example modifies Example 10.7 to add a new listener for each button. The two buttons OK and Cancel use the frame class as the listner. This example creates a new listener class as an additional listener for the action events on the buttons. When a button is clicked, both listeners respond to the action event. Run Liang, Oreilly, Herbert Schildt, Joseph O’Neil, Steven Holzner, IBM Corp