Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Event Handling and GUI Components.

Slides:



Advertisements
Similar presentations
Mouse Listeners We continue our examination of GUIs by looking at how to interact with the mouse –Just as Java creates Events when the user interacts with.
Advertisements

Graphical User Interfaces, 2D Graphics & Game Programming.
Chapter 9 – Interfaces and Polymorphism Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved.
Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Chapter Ten: Inheritance.
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Graphical User Interfaces Lecture 25, Thu Apr
Event-Driven Programming Thus far, our programs have been executed one statement after the other However, many programs depend on user actions to dictate.
Event Handling Events and Listeners Timers and Animation.
Chapter Day 10. © 2007 Pearson Addison-Wesley. All rights reserved4-2 Agenda Day 10 Questions from last Class?? Problem set 2 posted  10 programs from.
Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Chapter Nine: Interfaces and Polymorphism.
Carnegie Mellon University, MISM1 Java GUI programming and Java Threads GUI example taken from “Computing Concepts with Java 2” by Cay Horstmann Thread.
Object Oriented Programming Java 1 GUI example taken from “Computing Concepts with Java 2” by Cay Horstmann GUI Programming.
EVENTS CSC 171 FALL 2004 LECTURE 16. “Traditional” Input In console applications, user input is under control of the program The program asks the user.
Chapter Day 9. © 2007 Pearson Addison-Wesley. All rights reserved4-2 Agenda Day 8 Questions from last Class?? Problem set 2 posted  10 programs from.
GUIs Mimi Opkins CECS277.
Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington User Interface COMP 112 #30.
Java Programming: From Problem Analysis to Program Design, Second Edition1  Learn about basic GUI components.  Explore how the GUI components JFrame,
MIT AITI 2003 Lecture 17. Swing - Part II. The Java Event Model Up until now, we have focused on GUI's to present information (with one exception) Up.
1 Event Driven Programs Rick Mercer. 2 So what happens next?  You can layout a real pretty GUI  You can click on buttons, enter text into a text field,
Chapter 12 Event Handling. Chapter Goals To understand the Java event model To install action and mouse event listeners To accept input from buttons,
GUI Components and Design Here we add one more component to our programs, JButtons –JButtons can only be inserted into JPanels (or JApplets) –Clicking.
Java GUI’s are event driven, meaning they generate events when the user interacts with the program. Typical events are moving the mouse, clicking a mouse.
CSE 501N Fall ‘09 20: Event Handling and Inner Classes 17 November 2009 Nick Leidenfrost.
Chapter 17 – Graphical User Interfaces Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 10 - Interfaces.
Previous programs used a JLabel for OUTPUT. Another Swing component that can be used for both user input and output is the JTextfield. Suppose we want.
Ch 3-4: GUI Basics Java Software Solutions Foundations of Program Design Sixth Edition by Lewis & Loftus Coming up: GUI Components.
Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved. In order to display a drawing in a frame, define a class that extends.
Fall 2006Adapded from Java Concepts Companion Slides1 Event Handling Advanced Programming ICOM 4015 Lecture 13 Reading: Java Concepts Chapter 12.
– Advanced Programming P ROGRAMMING IN Lecture 21 Introduction to Swing.
Copyright © 2013 by John Wiley & Sons. All rights reserved. GRAPHICAL USER INTERFACES CHAPTER Slides by Donald W. Smith TechNeTrain.com Final Draft 10/30/11.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Chapter Nine and Ten Graphics.
Java Programming Week 4: Inheritance (Chapter 10).
MSc Workshop - © S. Kamin, U.Reddy Lect 4 - Events - 1 Lecture 4 – Event Handling r Painting r Event types r Catching different event types.
COMP 321 Week 2. Outline Event-Driven Programming Events, Event Sources, Event Listeners Button and Timer Events Mouse Events, Adapters.
MT311 Java Application Development and Programming Languages Li Tak Sing ( 李德成 )
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 10 - Interfaces.
For (int i = 1; i
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 21.1 Test-Driving the Painter Application.
Creating a GUI with JFC/Swing. What are the JFC and Swing? JFC –Java Foundation Classes –a group of features to help people build graphical user interfaces.
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Graphical User Interfaces Lecture 24, Tue Apr
Agenda Introduction. Event Model. Creating GUI Application. Event Examples.
©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e Chapter 10: Event Handling 1 Event Handling.
GUI DYNAMICS Lecture 11 CS2110 – Fall GUI Statics and GUI Dynamics  Statics: what’s drawn on the screen  Components buttons, labels, lists, sliders,
ICOM 4015 Fall 2008 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ICOM 4015: Advanced Programming Lecture 9 Chapter.
CHAPTER 10 EVENT HANDLING. CHAPTER GOALS To understand the Java event model To install mouse and action listeners To accept mouse and text input To display.
©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e Chapter 10: Event Handling 1 Chapter 10 Event Handling.
Mouse Listeners Moving the mouse will also generate events like the Timer –To have your program respond, you must implement either or both of MouseListener.
Graphical User Interfaces A Graphical User Interface (GUI) in Java is created with at least three kinds of objects: –components, events, and listeners.
Event-Driven Programming CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L.
Chapter 9 – Inheritance Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved.
1/18H212Mouse and Timer Events H212 Introduction to Software Systems Honors Lecture #16: Mouse and Timer Events October 26, 2015.
What Is an Event? Events – Objects that describe what happened Event sources – The generator of an event Event handlers – A method that receives an event.
Chapter 9 – Interfaces and Polymorphism Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved.
Swing GUI Components So far, we have written GUI applications which can ‘ draw ’. These applications are simple, yet typical of all Java GUI applications.
Chapter 8 – Interfaces and Polymorphism Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved.
Frame Windows Application program, not applet Construct and show frame JFrame frame = new JFrame(); *** frame.show(); *** Set default close operation..
GUI Tutorial Day 4. More GUI action  adding a Mouse Listener  SimpleDots  Simple mouse listener  Draw an oval where the mouse is clicked  Box example.
5-1 GUIs and Events Rick Mercer. 5-2 Event-Driven Programming with Graphical user Interfaces  Most applications have graphical user interfaces to respond.
1 A Quick Java Swing Tutorial. 2 Introduction Swing – A set of GUI classes –Part of the Java's standard library –Much better than the previous library:
Prepared by: Dr. Abdallah Mohamed, AOU-KW Unit7: Event-driven programming 1.
CSC 222: Computer Programming II
CompSci 230 S Programming Techniques
Chapter Ten: Inheritance
Big Java Chapters 9-10.
Chapter 10 – Interfaces.
A Quick Java Swing Tutorial
Chapter 10 – Inheritance Big Java by Cay Horstmann
Chapter 12 Event Handling
A Quick Java Swing Tutorial
Presentation transcript:

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Event Handling and GUI Components

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Graphical User Interfaces A Graphical User Interface (GUI) is created with at least three kinds of objects –components –events –listeners A GUI component defines a screen element to display information or allow the user to interact with the program –buttons, text fields, labels, menus, etc. A container is a special component that holds and organizes other components –dialog boxes, applets, frames, panels, etc.

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Events An event is an object that represents some activity to which we may want to respond For example, we may want our program to perform some action when the following occurs: –the mouse is moved –a mouse button is clicked –the mouse is dragged –a graphical button is clicked –a keyboard key is pressed –a timer expires Events often correspond to user actions, but not always

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Events and Listeners Component This object may generate an event Listener This object waits for and responds to an event Event When an event occurs, the generator calls the appropriate method of the listener, passing an object that describes the event

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. User interface events include key presses, mouse moves, button clicks, and so on Most programs don't want to be flooded by boring events A program can indicate that it only cares about certain specific events Event listener: Notified when event happens Belongs to a class that is provided by the application programmer Its methods describe the actions to be taken when an event occurs Event source: Event sources report on events When an event occurs, the event source notifies all event listeners Events, Event Sources, and Event Listeners

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Example: Use JButton components for buttons; attach an ActionListener to each button ActionListener interface: public interface ActionListener { void actionPerformed(ActionEvent event); } Need to supply a class whose actionPerformed method contains instructions to be executed when button is clicked event parameter contains details about the event, such as the time at which it occurred Events, Event Sources, and Event Listeners Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Construct an object of the listener and add it to the button: ActionListener listener = new ClickListener(); button.addActionListener(listener); Events, Event Sources, and Event Listeners (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: 04: /** 05: An action listener that prints a message. 06: */ 07: public class ClickListener implements ActionListener 08: { 09: public void actionPerformed(ActionEvent event) 10: { 11: System.out.println("I was clicked."); 12: } 13: } ClickListener.java

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionListener; 02: import javax.swing.JButton; 03: import javax.swing.JFrame; 04: 05: /** 06: This program demonstrates how to install an action listener. 07: */ 08: public class ButtonViewer 09: { 10: public static void main(String[] args) 11: { 12: JFrame frame = new JFrame(); 13: JButton button = new JButton("Click me!"); 14: frame.add(button); 15: 16: ActionListener listener = new ClickListener(); 17: button.addActionListener(listener); 18: 19: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 20: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21: frame.setVisible(true); 22: } ButtonViewer.java Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 23: 24: private static final int FRAME_WIDTH = 100; 25: private static final int FRAME_HEIGHT = 60; 26: } ButtonViewer.java (cont.) Output:

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Which objects are the event source and the event listener in the ButtonViewer program? Answer: The button object is the event source. The listener object is the event listener. Self Check

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Implement simple listener classes as inner classes like this: JButton button = new JButton("..."); // This inner class is declared in the same method as the button variable class MyListener implements ActionListener {... }; ActionListener listener = new MyListener(); button.addActionListener(listener); This places the trivial listener class exactly where it is needed, without cluttering up the remainder of the project Methods of an inner class can access local variables from surrounding blocks and fields from surrounding classes Using Inner Classes for Listeners

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Local variables that are accessed by an inner class method must be declared as final Example: add interest to a bank account whenever a button is clicked: JButton button = new JButton("Add Interest"); final BankAccount account = new BankAccount(INITIAL_BALANCE); // This inner class is declared in the same method as the account // and button variables. class AddInterestListener implements ActionListener { Using Inner Classes for Listeners Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. public void actionPerformed(ActionEvent event) { // The listener method accesses the account variable // from the surrounding block double interest = account.getBalance() * INTEREST_RATE / 100; account.deposit(interest); } }; ActionListener listener = new AddInterestListener(); button.addActionListener(listener); Using Inner Classes for Listeners (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: 06: /** 07: This program demonstrates how an action listener can access 08: a variable from a surrounding block. 09: */ 10: public class InvestmentViewer1 11: { 12: public static void main(String[] args) 13: { 14: JFrame frame = new JFrame(); 15: 16: // The button to trigger the calculation 17: JButton button = new JButton("Add Interest"); 18: frame.add(button); 19: InvestmentViewer1.java Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 20: // The application adds interest to this bank account 21: final BankAccount account = new BankAccount(INITIAL_BALANCE); 22: 23: class AddInterestListener implements ActionListener 24: { 25: public void actionPerformed(ActionEvent event) 26: { 27: // The listener method accesses the account variable 28: // from the surrounding block 29: double interest = account.getBalance() 30: * INTEREST_RATE / 100; 31: account.deposit(interest); 32: System.out.println("balance: " + account.getBalance()); 33: } 34: } 35: 36: ActionListener listener = new AddInterestListener(); 37: button.addActionListener(listener); 38: InvestmentViewer1.java (cont.) Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Output: balance: balance: balance: balance: : frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 40: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 41: frame.setVisible(true); 42: } 43: 44: private static final double INTEREST_RATE = 10; 45: private static final double INITIAL_BALANCE = 1000; 46: 47: private static final int FRAME_WIDTH = 120; 48: private static final int FRAME_HEIGHT = 60; 49: } InvestmentViewer1.java (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Example: investment viewer program; whenever button is clicked, interest is added, and new balance is displayed Building Applications with Buttons Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Construct an object of the JButton class: JButton button = new JButton("Add Interest"); We need a user interface component that displays a message: JLabel label = new JLabel("balance: " + account.getBalance()); Use a JPanel container to group multiple user interface components together: JPanel panel = new JPanel(); panel.add(button); panel.add(label); frame.add(panel); Building Applications with Buttons (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Listener class adds interest and displays the new balance: class AddInterestListener implements ActionListener { public void actionPerformed(ActionEvent event) { double interest = account.getBalance() * INTEREST_RATE / 100; account.deposit(interest); label.setText("balance=" + account.getBalance()); } } Add AddInterestListener as inner class so it can have access to surrounding final variables ( account and label ) Building Applications with Buttons

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: import javax.swing.JLabel; 06: import javax.swing.JPanel; 07: import javax.swing.JTextField; 08: 09: /** 10: This program displays the growth of an investment. 11: */ 12: public class InvestmentViewer2 13: { 14: public static void main(String[] args) 15: { 16: JFrame frame = new JFrame(); 17: 18: // The button to trigger the calculation 19: JButton button = new JButton("Add Interest"); InvestmentViewer2.java Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 20: 21: // The application adds interest to this bank account 22: final BankAccount account = new BankAccount(INITIAL_BALANCE); 23: 24: // The label for displaying the results 25: final JLabel label = new JLabel( 26: "balance: " + account.getBalance()); 27: 28: // The panel that holds the user interface components 29: JPanel panel = new JPanel(); 30: panel.add(button); 31: panel.add(label); 32: frame.add(panel); 33: 34: class AddInterestListener implements ActionListener 35: { 36: public void actionPerformed(ActionEvent event) 37: { 38: double interest = account.getBalance() 39: * INTEREST_RATE / 100; InvestmentViewer2.java (cont.) Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 40: account.deposit(interest); 41: label.setText( 42: "balance: " + account.getBalance()); 43: } 44: } 45: 46: ActionListener listener = new AddInterestListener(); 47: button.addActionListener(listener); 48: 49: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 50: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 51: frame.setVisible(true); 52: } 53: 54: private static final double INTEREST_RATE = 10; 55: private static final double INITIAL_BALANCE = 1000; 56: 57: private static final int FRAME_WIDTH = 400; 58: private static final int FRAME_HEIGHT = 100; 59: } InvestmentViewer2.java (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use a mouse listener to capture mouse events Implement the MouseListener interface: public interface MouseListener { void mousePressed(MouseEvent event); // Called when a mouse button has been pressed on a component void mouseReleased(MouseEvent event); // Called when a mouse button has been released on a component void mouseClicked(MouseEvent event); // Called when the mouse has been clicked on a component void mouseEntered(MouseEvent event); // Called when the mouse enters a component Mouse Events

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. void mouseExited(MouseEvent event); // Called when the mouse exits a component } mousePressed, mouseReleased : called when a mouse button is pressed or released mouseClicked : if button is pressed and released in quick succession, and mouse hasn't moved mouseEntered, mouseExited : mouse has entered or exited the component's area Mouse Events

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Add a mouse listener to a component by calling the addMouseListener method: public class MyMouseListener implements MouseListener { // Implements five methods } MouseListener listener = new MyMouseListener(); component.addMouseListener(listener); Sample program: enhance RectangleComponent – when user clicks on rectangle component, move the rectangle Mouse Events

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.Graphics; 02: import java.awt.Graphics2D; 03: import java.awt.Rectangle; 04: import javax.swing.JComponent; 05: 06: /** 07: This component displays a rectangle that can be moved. 08: */ 09: public class RectangleComponent extends JComponent 10: { 11: public RectangleComponent() 12: { 13: // The rectangle that the paint method draws 14: box = new Rectangle(BOX_X, BOX_Y, 15: BOX_WIDTH, BOX_HEIGHT); 16: } 17: // override paintComponent of JComponent 18: public void paintComponent(Graphics g) 19: { 20: super.paintComponent(g); 21: Graphics2D g2 = (Graphics2D) g; 22: RectangleComponent.java Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 23: g2.draw(box); 24: } 25: 26: /** 27: Moves the rectangle to the given location. x the x-position of the new location y the y-position of the new location 30: */ 31: public void moveTo(int x, int y) 32: { 33: box.setLocation(x, y); 34: repaint(); 35: } 36: 37: private Rectangle box; 38: 39: private static final int BOX_X = 100; 40: private static final int BOX_Y = 100; 41: private static final int BOX_WIDTH = 20; 42: private static final int BOX_HEIGHT = 30; 43: } RectangleComponent.java (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Call repaint when you modify the shapes that paintComponent draws box.setLocation(x, y); repaint(); Mouse listener: if the mouse is pressed, listener moves the rectangle to the mouse location class MousePressListener implements MouseListener { public void mousePressed(MouseEvent event) { int x = event.getX(); int y = event.getY(); component.moveTo(x, y); } Mouse Events Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. // Do-nothing methods public void mouseReleased(MouseEvent event) {} public void mouseClicked(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} } All five methods of the interface must be implemented; unused methods can be empty Mouse Events

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. RectangleComponentViewer Program Output

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.MouseListener; 02: import java.awt.event.MouseEvent; 03: import javax.swing.JFrame; 04: 05: /** 06: This program displays a RectangleComponent. 07: */ 08: public class RectangleComponentViewer 09: { 10: public static void main(String[] args) 11: { 12: final RectangleComponent component = new RectangleComponent(); 13: 14: // Add mouse press listener 15: 16: class MousePressListener implements MouseListener 17: { 18: public void mousePressed(MouseEvent event) 19: { 20: int x = event.getX(); 21: int y = event.getY(); 22: component.moveTo(x, y); 23: } RectangleComponentViewer.java Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 24: 25: // Do-nothing methods 26: public void mouseReleased(MouseEvent event) {} 27: public void mouseClicked(MouseEvent event) {} 28: public void mouseEntered(MouseEvent event) {} 29: public void mouseExited(MouseEvent event) {} 30: } 31: 32: MouseListener listener = new MousePressListener(); 33: component.addMouseListener(listener); 34: 35: JFrame frame = new JFrame(); 36: frame.add(component); 37: 38: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 39: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 40: frame.setVisible(true); 41: } 42: 43: private static final int FRAME_WIDTH = 300; 44: private static final int FRAME_HEIGHT = 400; 45: } RectangleComponentViewer.java (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Why must the MousePressListener class supply five methods? Answer: It implements the MouseListener interface, which has five methods. Self Check

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use inheritance for complex frames to make programs easier to understand Design a subclass of JFrame Store the components as instance fields Initialize them in the constructor of your subclass If initialization code gets complex, simply add some helper methods Using Inheritance to Customize Frames

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use JTextField components to provide space for user input final int FIELD_WIDTH = 10; // In characters final JTextField rateField = new JTextField(FIELD_WIDTH); Place a JLabel next to each text field JLabel rateLabel = new JLabel("Interest Rate: "); Processing Text Input Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Supply a button that the user can press to indicate that the input is ready for processing Processing Text Input Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The button's actionPerformed method reads the user input from the text fields (use getText ) Class AddInterestListener implements ActionListener { public void actionPerformed(ActionEvent event) { double rate = Double.parseDouble(rateField.getText());... } } Processing Text Input (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import javax.swing.JFrame; 02: 03: /** 04: This program displays the growth of an investment. 05: */ 06: public class InvestmentViewer3 07: { 08: public static void main(String[] args) 09: { 10: JFrame frame = new InvestmentFrame(); 11: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 12: frame.setVisible(true); 13: } 14: } InvestmentViewer3.java

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: import javax.swing.JLabel; 06: import javax.swing.JPanel; 07: import javax.swing.JTextField; 08: 09: /** 10: A frame that shows the growth of an investment with variable interest. 11: */ 12: public class InvestmentFrame extends JFrame 13: { 14: public InvestmentFrame() 15: { 16: account = new BankAccount(INITIAL_BALANCE); 17: 18: // Use instance fields for components 19: resultLabel = new JLabel("balance: " + account.getBalance()); 20: InvestmentFrame.java Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 21: // Use helper methods 22: createTextField(); 23: createButton(); 24: createPanel(); 25: 26: setSize(FRAME_WIDTH, FRAME_HEIGHT); 27: } 28: 29: private void createTextField() 30: { 31: rateLabel = new JLabel("Interest Rate: "); 32: 33: final int FIELD_WIDTH = 10; 34: rateField = new JTextField(FIELD_WIDTH); 35: rateField.setText("" + DEFAULT_RATE); 36: } 37: 38: private void createButton() 39: { 40: button = new JButton("Add Interest"); 41: InvestmentFrame.java (cont.) Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 42: class AddInterestListener implements ActionListener 43: { 44: public void actionPerformed(ActionEvent event) 45: { 46: double rate = Double.parseDouble( 47: rateField.getText()); 48: double interest = account.getBalance() 49: * rate / 100; 50: account.deposit(interest); 51: resultLabel.setText( 52: "balance: " + account.getBalance()); 53: } 54: } 55: 56: ActionListener listener = new AddInterestListener(); 57: button.addActionListener(listener); 58: } 59: 60: private void createPanel() InvestmentFrame.java (cont.) Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 61: { 62: panel = new JPanel(); 63: panel.add(rateLabel); 64: panel.add(rateField); 65: panel.add(button); 66: panel.add(resultLabel); 67: add(panel); 68: } 69: 70: private JLabel rateLabel; 71: private JTextField rateField; 72: private JButton button; 73: private JLabel resultLabel; 74: private JPanel panel; 75: private BankAccount account; 76: 77: private static final int FRAME_WIDTH = 450; 78: private static final int FRAME_HEIGHT = 100; 79: 80: private static final double DEFAULT_RATE = 5; 81: private static final double INITIAL_BALANCE = 1000; 82: } InvestmentFrame.java (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use a JTextArea to show multiple lines of text You can specify the number of rows and columns: final int ROWS = 10; final int COLUMNS = 30; JTextArea textArea = new JTextArea(ROWS, COLUMNS); setText : to set the text of a text field or text area append : to add text to the end of a text area Use newline characters to separate lines: textArea.append(account.getBalance() + "\n"); To use for display purposes only: textArea.setEditable(false); // program can call setText and append to change it Text Areas

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. To add scroll bars to a text area: JTextArea textArea = new JTextArea(ROWS, COLUMNS); JScrollPane scrollPane = new JScrollPane(textArea); Text Areas

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: import javax.swing.JLabel; 06: import javax.swing.JPanel; 07: import javax.swing.JScrollPane; 08: import javax.swing.JTextArea; 09: import javax.swing.JTextField; 10: 11: /** 12: A frame that shows the growth of an investment with variable interest. 13: */ 14: public class InvestmentFrame extends JFrame 15: { 16: public InvestmentFrame() 17: { 18: account = new BankAccount(INITIAL_BALANCE); 19: resultArea = new JTextArea(AREA_ROWS, AREA_COLUMNS); 20: resultArea.setEditable(false); 21: InvestmentFrame.java Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 22: // Use helper methods 23: createTextField(); 24: createButton(); 25: createPanel(); 26: 27: setSize(FRAME_WIDTH, FRAME_HEIGHT); 28: } 29: 30: private void createTextField() 31: { 32: rateLabel = new JLabel("Interest Rate: "); 33: 34: final int FIELD_WIDTH = 10; 35: rateField = new JTextField(FIELD_WIDTH); 36: rateField.setText("" + DEFAULT_RATE); 37: } 38: 39: private void createButton() 40: { 41: button = new JButton("Add Interest"); 42: InvestmentFrame.java (cont.) Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 43: class AddInterestListener implements ActionListener 44: { 45: public void actionPerformed(ActionEvent event) 46: { 47: double rate = Double.parseDouble( 48: rateField.getText()); 49: double interest = account.getBalance() 50: * rate / 100; 51: account.deposit(interest); 52: resultArea.append(account.getBalance() + "\n"); 53: } 54: } 55: 56: ActionListener listener = new AddInterestListener(); 57: button.addActionListener(listener); 58: } 59: 60: private void createPanel() 61: { 62: panel = new JPanel(); 63: panel.add(rateLabel); 64: panel.add(rateField); 65: panel.add(button); InvestmentFrame.java (cont.) Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 66: JScrollPane scrollPane = new JScrollPane(resultArea); 67: panel.add(scrollPane); 68: add(panel); 69: } 70: 71: private JLabel rateLabel; 72: private JTextField rateField; 73: private JButton button; 74: private JTextArea resultArea; 75: private JPanel panel; 76: private BankAccount account; 77: 78: private static final int FRAME_WIDTH = 400; 79: private static final int FRAME_HEIGHT = 250; 80: 81: private static final int AREA_ROWS = 10; 82: private static final int AREA_COLUMNS = 30; 83: 84: private static final double DEFAULT_RATE = 5; 85: private static final double INITIAL_BALANCE = 1000; 86: } InvestmentFrame.java (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. How would you modify the InvestmentFrame program if you didn't want to use scroll bars? Answer: Don't construct a JScrollPane and add the resultArea object directly to the frame. Self Check