Session 9 CannonWorld, Event-driven Programming, and Border Layout.

Slides:



Advertisements
Similar presentations
1 Graphical User Interface (GUI) Applications Abstract Windowing Toolkit (AWT) Events Handling Applets.
Advertisements

Java GUI building with the AWT. AWT (Abstract Window Toolkit) Present in all Java implementations Described in (almost) every Java textbook Adequate for.
GUI. Swing Programs Four basic types of Top Level Window – JFrame, a top level window decorated like a native window – JWindow, an undecorated stand-alone.
Graphical User Interfaces
CS18000: Problem Solving and Object-Oriented Programming.
Graphic User Interfaces Layout Managers Event Handling.
CMSC 341 Building Java GUIs. 09/26/2007 CMSC 341 GUI 2 Why Java GUI Development? Course is about Data Structures, not GUIs. We are giving you the opportunity.
Java Swing Recitation – 11/(20,21)/2008 CS 180 Department of Computer Science, Purdue University.
Event Driven Programming and GUIs Part 3 CS221 – 4/15/09.
June 1, 2000 Object Oriented Programming in Java (95-707) Advanced Topics 1 Lecture 9 Object Oriented Programming in Java Advanced Topics Abstract Windowing.
GUI and Event-Driven Programming Recitation – 3/6/2009 CS 180 Department of Computer Science, Purdue University.
Chapter 121 Window Interfaces Using Swing Chapter 12.
Chapter 13: Advanced GUIs and Graphics J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition.
Scott Grissom, copyright 2006Ch 11: GUI Slide 1 Graphical User Interfaces (Ch 11) Careful design of a graphical user interface is key to a viable software.
Java Programming Chapter 10 Graphical User Interfaces.
Applets, AWTS CompSci 230 Software Construction.
Computer Science II 810:062 Section 01 Session 2 - Objects and Responsibilities.
Java Software Solutions Lewis and Loftus Chapter 10 1 Copyright 1997 by John Lewis and William Loftus. All rights reserved. Graphical User Interfaces --
Java Programming: From Problem Analysis to Program Design, 4e Chapter 12 Advanced GUIs and Graphics.
Applets and Frames CS 21a: Introduction to Computing I First Semester,
Java GUI building with the AWT. AWT (Abstract Window Toolkit) Present in all Java implementations Described in (almost) every Java textbook Adequate for.
Graphical User Interface CSI 1101 N. El Kadri. Plan - agenda Graphical components Model-View-Controller Observer/Observable.
Java Programming: Advanced Topics 1 Common Elements of Graphical User Interfaces Chapter 6.
C13a, AWT Create, display, facilitate user interaction with window objects software framework: a way of structuring generic solutions to common problems.
Session 11 Border Layout, using Panels, Introduction to PinBallGame.
Session 10 CannonGame and Event-driven Programming.
GUIs in Java Swing, Events CS2110, SW Development Methods Readings: MSD, Chapter 12 Lab Exercise.
1 Block1 – unit 2 (The Case study in Budd 5-6).  create a small application that uses the Abstract Windowing Toolkit (AWT)  Swing packages to simulate.
1 Outline 1 Introduction 2 Overview of Swing Components 3 JLabel 4 Event Handling 5 TextFields 6 How Event Handling Works 7 JButton 8 JCheckBox and JRadioButton.
Graphics and Event-Driven Programming in Java John C. Ramirez Department of Computer Science University of Pittsburgh.
Copyright © 2002, Systems and Computer Engineering, Carleton University c-Gui3.ppt * Object-Oriented Software Development Part 18-c Building.
Timer class and inner classes. Processing timer events Timer is part of javax.swing helps manage activity over time Use it to set up a timer to generate.
Layout Managers Arranges and lays out the GUI components on a container.
Computer Science [3] Java Programming II - Laboratory Course Lab 4: Common GUI Event Types and Listener Interfaces Layout Mangers Faculty of Engineering.
1 / 67 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 14 Programming Fundamentals using Java 1.
CS324e - Elements of Graphics and Visualization Java GUIs - Event Handling.
University of Limerick1 Software Architecture Java Layout Managers.
Interactive Programs Java API. Terminology Event—an action or occurrence, not part of a program, detected by the program. Events can be Event—an action.
The Abstract Window Toolkit (AWT) supports Graphical User Interface (GUI) programming. AWT features include: a rich set of user interface components; a.
SEEM3460 Tutorial GUI in Java. Some Basic GUI Terms Component (Control in some languages) the basic GUI unit something visible something that user can.
Kim B. Bruce, Andrea Danyluk & Tom Murtagh Williams College † Partially supported by NSF CCLI grant DUE Java: An Eventful Approach An innovative.
Introduction to Java Chapter 9 - Graphical User Interfaces and Applets1 Chapter 9 Graphical User Interfaces and Applets.
Ajmer Singh PGT(IP) JAVA IDE Programming - I. Ajmer Singh PGT(IP) GUI (Graphical User Interface) It is an interface that uses a graphic entities along.
1 Event Driven Programs with a Graphical User Interface Rick Mercer.
A cannon game ?. Simple version angle from command line, one shot only Coordinate system is “upside-down”: Use dy(int) method to transform y coordinate:
1 Layout Managers Layout managers –Provided for arranging GUI components –Provide basic layout capabilities –Processes layout details –Programmer can concentrate.
CSI 3125, Preliminaries, page 1 Layout Managers. CSI 3125, Preliminaries, page 2 Layout Managers The LayoutManagers are used to arrange components in.
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,
Computer Science II 810:062 Section 01 Session 2 - Objects and Responsibilities.
Graphical User Interface (GUI) Two-Dimensional Graphical Shapes.
Chapter 10 - Writing Graphical User Interfaces1 Chapter 10 Writing Graphical User Interfaces.
Swing GUI Components So far, we have written GUI applications which can ‘ draw ’. These applications are simple, yet typical of all Java GUI applications.
Graphical User Interface (GUI)
Event Handler Methods Text field Object Responder JAVA AWT Environment: Messages are sent between JAVA Objects Screen Event Notification Press Button.
User Interface Components. Layout Placement of UI components in a window – Size & Position Each component occupies a rectangular region in the window.
CSC 205 Programming II Lecture 7 AWT – Event Handling & Layout.
5-1 GUIs and Events Rick Mercer. 5-2 Event-Driven Programming with Graphical user Interfaces  Most applications have graphical user interfaces to respond.
AWT Vs SWING. 2 AWT (Abstract Window Toolkit) Present in all Java implementations Described in most Java textbooks Adequate for many applications Uses.
CSC 205 Programming II Lecture 5 AWT - I.
Christopher Budo, Davis Nygren, spencer franks, Luke miller
Chap 7. Building Java Graphical User Interfaces
Graphical User Interfaces -- Introduction
Containers and Components
Creating Graphical User Interfaces
GUI building with the AWT
Border Layout, using Panels, Introduction to PinBallGame
GUI building with the AWT
Session 29 Introducing CannonWorld (Event-driven Programming)
Graphical User Interface
Presentation transcript:

Session 9 CannonWorld, Event-driven Programming, and Border Layout

The CannonWorld Budd has added two new objects to our cannon game: a button at the top of the window. When the user presses the button, the cannon fires a cannonball. a slider at the right. When the user adjusts the position of the slider, the cannon changes the angle at which it fires.

An Example: The CannonWorld The user can cause these events at any time. The user controls the flow of the program, not the game world. Control of the game changes from “Do this, then that, then this other thing.” to “Respond to the user’s action.”

Event-Driven Programming Object-oriented programming shifts program control from a top-level “main” program into a set of collaborating objects. This new emphasis also makes it easier for us to write programs that shift control from the program to the user.

Event-Driven Programming This style of programming is called event-driven because it builds program control around one or more events that the user causes. The program retains low-level control of how to respond to each kind of event that the user can initiate. Event-driven programming can also be done in environments with little or no user interaction. In such environments, the events are generated by other programs: objects that generate events to request services.

Event-Driven Programming In Java, the programmer defines objects called listeners that wait for and respond to user-initiated events. A listener can be attached to any object capable of generating an event caused by the user: the mouse –moving the mouse –pressing and releasing mouse buttons the keyboard –pressing any key active components such as buttons and sliders We can also attach listeners to non-UI components, but we won’t write that sort of program until much later in the semester.

Listeners in the CannonWorld Each GUI component needs a listener to wait for the user to manipulate and then relay the event to the CannonWorld. private Scrollbar slider; private class ScrollBarListener implements AdjustmentListener { public void adjustmentValueChanged( AdjustmentEvent e ){ angle = slider.getValue(); message = "Angle: " + angle; repaint(); }

Listeners in the CannonWorld private class FireButtonListener implements ActionListener { public void actionPerformed( ActionEvent e ) { double radianAngle = angle * Math.PI / 180.0; double sinAngle = Math.sin(radianAngle); double cosAngle = Math.cos(radianAngle); cannonBall = new CannonBall( 20 + (int) (30 * cosAngle), dy(5+(int) (30 * sinAngle)), 5, 12 * cosAngle, -12 * sinAngle ); repaint(); }

Listeners in the CannonWorld public CannonWorld() { setSize ( FrameWidth, FrameHeight ); setTitle( "Cannon Game" ); Button fire = new Button( "fire" ); fire.addActionListener( new FireButtonListener() ); add( "North", fire ); slider = new Scrollbar( Scrollbar.VERTICAL, angle, 5, 0, 90 ); slider.addAdjustmentListener( new ScrollBarListener() ); add( "East", slider ); }

Listeners as Inner Classes What is an inner class? Any class defined within another class definition: public class CannonWorld extends Frame {... private class FireButtonListener... {... }... } How do we create one? “Just do it.” Why do you suppose FireButtonListener is private?

Listeners as Inner Classes Why do we create them? For convenient access to the private members of the outer class. For simple collaboration between pure masters and slaves. Almost only for listeners. Notice that one.java file can produce many.class files.

Listeners Implement Interfaces Examples ScrollBarListener implements AdjustmentListener FireButtonListener implements ActionListener Review: What is an interface? A list of responsibilities. A set of messages to which an object promises to respond. Sometimes called a protocol. Like a class with no behavior.

Why Use Interfaces Why do we use interfaces in this program? When the user presses a button, the Java run- time system sends an actionPerformed() message to any object that is listening for the button’s events. If we want our listener to listen, it must listen for that particular message. When the user adjusts a slider, the Java run-time system sends an adjustmentValueChanged() message to any object that is listening for the slider’s events. If we want our listener to listen, it must listen for that particular message.

Why Use Interfaces More generally, why do we use interfaces? To allow our objects to work inside an existing framework. To allow programmers to create objects that fulfill responsibilities — without committing to how their objects do so!

Layout Managers Frame is a subclass of the Container class –so it can hold objects such as buttons, scroll bars, etc. –layout manager assigns locations to these objects within the container –the default LayoutManager is BorderLayout North South CenterWestEast

Layout Managers Five standard types of layout managers: –BorderLayout –GridLayout - creates an rectangular array of components –FlowLayout - places components in rows left to right, top to bottom –CardLayout - stacks components vertically with only one visible at any one time –GridBagLayout - most general, but most complex. It allows for a nonuniform grid of squares with components placed in various positions within each square.

An Exercise Add to our CannonWorld a button that allows the user to change the color of the cannonball from blue to red to yellow to blue.... Place the button on the lefthand side of the window.

Steps to the solution: 1. Add a button to the CannonWorld. 2. Add a listener class to CannonWorld. The listener’s actionPerformed method needs to tell the ball to take the next color. It could have an if-statement that toggles the colors in sequence, but... Shouldn’t the ball be controlling its own color, rather than the application using the ball? So in my solution, I decided to have the CannonBall respond to a nextColor() message and toggle its own color.

More Steps to the Solution The next question is, do I add a nextColor() method directly to the CannonBall class, or do I create a subclass? In general, if we need a new kind of object, then we should create a new kinds of object. (If a particular method turns out to be more generally useful than we anticipate, then we can always refactor the solution so that the method lives higher in the class hierarchy.) So: 3. Implement a ChangingCannonBall class. 4. Use instances of ChangingCannonBall in the CannonWorld.

Using GridLayout MemoPad uses GridLayout exclusively, but it nests GridLayouts: –MemoPad frame is GridLayout( 3, 1 ) top row contains a Panel with GridLayout( 2, 2 ) middle row contains a Panel with GridLayout( 1, 3 )

Using GridLayout –MemoPad frame is GridLayout( 3, 1 )

Using GridLayout public class MemoPad extends CloseableFrame {... public MemoPad() { database = new DefaultMemoDatabase(); setLayout( new GridLayout( 3, 1 ) ); setSize( 300, 140 ); setTitle( "Memo Pad " ); fieldPanel = new FieldPanel(); fieldPanel.setSize( 300, 80 ); add( fieldPanel ); buttonPanel = new ButtonPanel( this ); buttonPanel.setSize( 300, 30 ); add( buttonPanel ); messagePanel = new MessagePanel( ".. No messages.." ); messagePanel.setSize( 300, 30 ); add( messagePanel ); }

Using GridLayout public class FieldPanel extends Panel { private TextField keyField; private TextField valueField; public FieldPanel() { setLayout( new GridLayout( 2, 2 ) ); keyField = new TextField( 20 ); valueField = new TextField( 20 ); add( new Label( "Key:" ) ); add( keyField ); add( new Label( "Value:" ) ); add( valueField ); }...

Using GridLayout public class ButtonPanel extends Panel { private MemoPad memos; public ButtonPanel( MemoPad p ) { memos = p; setLayout( new GridLayout( 1, 3 ) ); Button insertButton = new Button( "Insert" ); insertButton.addActionListener( new InsertButtonListener() ); add( insertButton ); Button findButton = new Button( "Find" ); findButton.addActionListener( new FindButtonListener() ); add( findButton ); Button removeButton = new Button( "Remove" ); removeButton.addActionListener( new RemoveButtonListener() ); add( removeButton ); }...

Using Panels with BorderLayout BorderLayout seems very restrictive, but you can use a panel to hold several components in each “direction”.

An Exercise Place the “change color” button in a Panel with the “fire” button along the top of the window.

Test 1 Tuesday, Feb. 14 (next week) Chapters: 1, 2, 3, 4, 5, 11, 14 (some file stuff) Test format: closed book, except one 8.5”x11” sheet of paper (both sides)

Study Hints 1. Go through each chapter and making a list of the vocabulary terms that we have discussed. Could you explain what each means and how they relate to each other? 2. Review the slides I used during class and consider the points I have emphasized either directly on the slides or in addition to the slides.

Study Hints 3. Review the programs we have worked with (MemoPad, Accumulator, LunarLander, Ball and BallWorld, CannonWorld, etc). I will provide you with any code I expect you to use/modify, but you don’t want to waste test time reviewing how the code actually works. 4. Read through the questions at the end of the chapters. Play the "second guess” the instructor game. That is, think about what you reviewed in the previous steps and think about how well each question would fit into these topics. Some of my questions will come from these questions. Others will be modifications to these questions based more on what I have chosen to emphasize.