CS/ENGRD 2110 FALL 2014 Lecture 15: Graphical User Interfaces (GUIs): Listening to events 1.

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

CS18000: Problem Solving and Object-Oriented Programming.
Introduction to Java Classes, events, GUI’s. Understand: How to use TextPad How to define a class or object How to create a GUI interface How event-driven.
Computer Science 209 Graphics and GUIs. Working with Color The class java.awt.Color includes constants for typical color values and also supports the.
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. In this class we will cover: Basics of event handling The AWT event hierarchy Semantic and low-level events in the AWT.
Mouse Events and Keyboard Events
Event Handling Events and Listeners Timers and Animation.
Unit 12 Object-oriented programming: Event-driven programming for GUI Jin Sa.
Lecture 18 Review the difference between abstract classes and interfaces The Cloneable interface Shallow and deep copies The ActionListener interface,
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.
1 Listening to events on GUIs Sec contains this material. Corresponding lectures on ProgramLive CD is a better way to learn the material. Top finalists.
Welcome to CIS 083 ! Events CIS 068.
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.
More Event Handling Adapters Anonymous Listeners Pop menus Validating User Input.
CS 11 java track: lecture 4 This week: arrays interfaces listener classes inner classes GUI callbacks.
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.
(c) University of Washington07b-1 CSC 143 Java Events, Event Handlers, and Threads Reading: Ch. 17.
CSE 501N Fall ‘09 20: Event Handling and Inner Classes 17 November 2009 Nick Leidenfrost.
SD2071 Games Programming Abstraction, inheritance and interfaces Exceptions Two dimensional arrays Java collections framework Files Aaron Kans.
7/3/00SEM107- © Kamin & ReddyClass 11 - Events - 1 Class 11 - Events r A couple of odds & ends m Component sizes  switch statement r Event types r Catching.
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.
– Advanced Programming P ROGRAMMING IN Lecture 21 Introduction to Swing.
CS2110. GUIS: Listening to Events 1 Download the demo zip file from course website and look at the demos of GUI things: sliders, scroll bars, combobox.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
MSc Workshop - © S. Kamin, U. ReddyLect 3 - GUI -1 Lecture 3 - Graphical User Interfaces r GUI toolkits in Java API r JFrame r GUI components.
Copyright © 2002, Systems and Computer Engineering, Carleton University b-Gui2.ppt * Object-Oriented Software Development Part 18-b Building.
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.
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.
CS2110. GUIS: Listening to Events Also Example of Stepwise Refinement and Anonymous classes 1 Download the demo zip file from course website and look at.
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.
UID – Event Handling and Listeners Boriana Koleva
Java GUI. Graphical User Interface (GUI) a list a button a text field a label combo box checkbox.
CMSC 341 Making Java GUIs Functional. 09/29/2007 CMSC 341 Events 2 More on Swing Great Swing demo at /demos/jfc/SwingSet2/SwingSet2Plugin.html.
GUI DYNAMICS Lecture 11 CS2110 – Fall GUI Statics and GUI Dynamics  Statics: what’s drawn on the screen  Components buttons, labels, lists, sliders,
1 Lecture 25 Listening to buttons and mice Quotes by Tony Hoare There are two ways of constructing a software design: (1) make it so simple that there.
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.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 27.1 Test-Driving the Drawing Shapes Application.
1 Listening to events on GUIs Sec contains this material. Corresponding lectures on ProgramLive CD is a better way to learn the material. Why men.
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.
Swing GUI Components So far, we have written GUI applications which can ‘ draw ’. These applications are simple, yet typical of all Java GUI applications.
Lesson 28: More on the GUI button, frame and actions.
UQC117S2 Graphics Programming Lecture 2 Event Handling Program as a sequence of instructions Event -driven program Need to detect the event and carry out.
Sep 181 Example Program DemoTranslateEnglishGUI.java.
MIT AITI 2004 Swing Event Model Lecture 17. The Java Event Model In the last lecture, we learned how to construct a GUI to present information to the.
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 12. Listening to events. Inner and anonymous classes Why men think “computer” should be a feminine word 1. No one but their creator understands their.
1 DemoBasic_v3, DemoBasic_v4 JButton JLabel. 2 Registering an ActionListener Register by invoking the following from within constructor DemoBasicFrame.
Dept. of CSIE, National University of Tainan 10/21/2012 Responding to User Input.
Prepared by: Dr. Abdallah Mohamed, AOU-KW Unit7: Event-driven programming 1.
Review Session for EXCEPTIONS & GUI -Ankur Agarwal 1.
CS2110. GUIS: Listening to Events
Events and Event Handling
CS2110. GUIS: Listening to Events
Computer Science 209 Graphics and GUIs.
Listening to events on GUIs
Ellen Walker Hiram College
GUI Programming III: Events
CS2110. GUIS: Listening to Events
Event-driven programming for GUI
CS2110. GUIS: Listening to Events
CS2110. GUIS: Listening to Events
Events, Event Handlers, and Threads
Lecture 21. Listening to events on a GUI (and development of a loop)
CS2110. GUIS: Listening to Events
12. Listening to events. Inner and anonymous classes
Presentation transcript:

CS/ENGRD 2110 FALL 2014 Lecture 15: Graphical User Interfaces (GUIs): Listening to events 1

Announcement: Prelim 1 grades  Correction factor applied to Prelim 1 grades  Linear scaling:  100% stays 100%  Average grade raised from 62% to 70%  New grade called “Prelim 1 Revised (P1R)” in CMS  Used in calculating final grade 2 P1 P1R

Today’s lecture  GUIS: Listening to Events  Also covers:  Stepwise Refinement  Inner classes & anonymous classes  Demos on website:  Download the demo zip file  Demos of sliders, scroll bars, combobox listener, adapters, etc. 3

4 Listening to events: mouse click, mouse movement into or out of a window, a keystroke, etc. An event is a mouse click, a mouse movement into or out of a window, a keystroke, etc. To be able to “listen to” a kind of event, you have to: 1. Have some class C implement an interface IN that is connected with the event. 2. In class C, override methods required by interface IN; these methods are generally called when the event happens. 3. Register an object of class C as a listener for the event. That object’s methods will be called when event happens. We show you how to do this for clicks on buttons, clicks on components, and keystrokes.

5

6 Example: JButton Instance: associated with a “button” on the GUI, which can be clicked to perform an action jb1= new JButton(); // jb1 has no text on it jb2= new JButton(“first”); // jb2 has label “first” on it jb2.isEnabled(); // true iff a click on button can be detected jb2.setEnabled(b); // Set enabled property jb2.addActionListener(object); // object’s w/ method called when jb2 clicked At least 100 more methods; these are most important JButton is in package javax.swing

7 Listening to a JButton 1. Implement interface ActionListener: public class C extends JFrame implements ActionListener {... } 2. In class C override actionPerformed, which is to be called when button is clicked: /** Process click of button */ public void actionPerformed(ActionEvent e) {... } 3. Add an instance of class C an “action listener” for button: button.addActionListener(this);

8 /** Object has two buttons. Exactly one is enabled. */ class ButtonDemo1 extends JFrame { /** Class inv: only one of (eastB, westB) is enabled */ JButton westB = new JButton("west"); JButton eastB = new JButton("east"); public ButtonDemo1(String t) { super(t); Container cp= getContentPane(); cp.add(westB, BLayout.WEST); cp.add(eastB, Blayout.EAST); westB.setEnabled(false); eastB.setEnabled(true); pack(); setVisible(true); } public void actionPerformed(ActionEvent e) { boolean b = eastB.isEnabled(); eastB.setEnabled(!b); westB.setEnabled(b); } red: listening blue: placing Listening to a Button implements ActionListener westB.addActionListener(this); eastB.addActionListener(this);

9 Example: A JPanel that is painted The JFrame content pane has a JPanel in its CENTER and a “reset” button in its SOUTH. The JPanel has a horizontal box b, which contains two vertical Boxes. Each vertical Box contains two instances of class Square. Click a Square that has no pink circle, and a pink circle is drawn. Click a square that has a pink circle, and the pink circle disappears. Click the rest button and all pink circles disappear. This GUI has to listen to: (1) a click on Button reset (2) a click on a Square (a Box) these are different kinds of events, and they need different listener methods

10 /** Instance: JPanel of size (WIDTH, HEIGHT). * Green or red: */ public class Square extends JPanel { public static final int HEIGHT = 70; public static final int WIDTH = 70; private int x, y; // Panel is at (x, y) private boolean hasDisk= false; /** Const: square at (x, y). Red/green? Parity of x+y. */ public Square(int x, int y) { this.x = x; this.y = y; setPreferredSize(new Dimension(WIDTH,HEIGHT)); } /** Complement the "has pink disk" property */ public void complementDisk() { hasDisk = ! hasDisk; repaint(); // Ask the system to repaint the square } Class Square continued on later

11 Aside: The “Graphics” class An object of abstract class Graphics has methods to draw on a component (e.g. on a JPanel, or canvas). Major methods: drawString(“abc”, 20, 30); drawLine(x1, y1, x2, y2); drawRect(x, y, width, height); fillRect(x, y, width, height); drawOval(x, y, width, height); fillOval(x, y, width, height); setColor(Color.red); getColor() getFont() setFont(Font f); Graphics is in package java.awt Given a Graphics object, you use it to draw on a component.

12 Class Square (cont’d) /** Remove pink disk (if present) */ public void clearDisk() { hasDisk= false; repaint(); } /* Paint this square using g. System calls paint whenever square has to be redrawn.*/ public void paint(Graphics g) { if ((x+y)%2 == 0) g.setColor(Color.green); else g.setColor(Color.red); g.fillRect(0, 0, WIDTH-1, HEIGHT-1); if (hasDisk) { g.setColor(Color.pink); g.fillOval(7, 7, WIDTH-14, HEIGHT-14); } g.setColor(Color.black); g.drawRect(0, 0, WIDTH-1,HEIGHT-1); g.drawString("("+x+", "+y+")", 10, 5+HEIGHT/2); }

13 Listening to mouse events (click/press/release/enter/leave a component) public interface MouseListener { void mouseClicked(MouseEvent e); void mouseEntered(MouseEvent e); void mouseExited(MouseEvent e); void mousePressed(MouseEvent e); void mouseReleased(MouseEvent e); } In package java.awt.event Having to write all of these in a class that implements MouseListener, even though you don’t want to use all of them, can be a pain. So, an adapter class is provided that implements them, albeit with empty methods.

14 Listening to mouse events (click/press/release/enter/leave a component) public class MouseInputAdapter implements MouseListener, MouseInputListener { public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} … } In package java.swing.event So, just write a subclass of MouseInputAdapter and override only the methods appropriate for the application

Javax.swing.event.MouseInputAdapter implements MouseListener 15 DemoMouseEvents() { … … } DemoMouseEvents a2 … JFrame a1 dma … lab1 … lab1.addMouseListener(dma); mouseClicked() mouseEntered() mouseExited() mousePressed() mouseReleased() MIA a1 mouseClicked() { … } MouseEvents MouseListener

16 A class that listens to a mouseclick in a Square import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; /** Contains a method that responds to a mouse click in a Square */ public class MouseEvents extends MouseInputAdapter { // Complement "has pink disk" property public void mouseClicked(MouseEvent e) { Object ob= e.getSource(); if (ob instanceof Square) { ((Square)ob).complementDisk(); } This class has several methods (that do nothing) that process mouse events: mouse click mouse press mouse release mouse enters component mouse leaves component mouse dragged beginning in component Our class overrides only the method that processes mouse clicks red: listening blue: placing

17 Class MouseDemo2 public class MouseDemo2 extends JFrame Square b00, b01= new squares; Square b10, b01= new squares; Box b = new Box(…X_AXIS); Box leftC = new Box(…Y_AXIS); Box riteC = new Box(..Y_AXIS); Jbutton jb = new JButton("reset"); /** Constructor: … */ public MouseDemo2() { super(t); place components on content pane; pack, make unresizeable, visible; } red: listening blue: placing implements ActionListener { public void actionPerformed(ActionEvent e) { call clearDisk() for b00, b01, b10, b11 } MouseEvents me = new MouseEvents(); jb.addActionListener(this); b00.addMouseListener(me); b01.addMouseListener(me); b10.addMouseListener(me); b11.addMouseListener(me);

18 Listening to the keyboard import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AllCaps extends KeyAdapter { JFrame capsFrame = new JFrame(); JLabel capsLabel = new JLabel(); public AllCaps() { capsLabel.setHorizontalAlignment(SwingConstants.CENTER); capsLabel.setText(":)"); capsFrame.setSize(200,200); Container c = capsFrame.getContentPane(); c.add(capsLabel); capsFrame.addKeyListener(this); capsFrame.show(); } public void keyPressed (KeyEvent e) { char typedChar= e.getKeyChar(); capsLabel.setText (("'" + typedChar + "'").toUpperCase()); } 1. Extend this class. 2. Override this method. It is called when a key stroke is detected. 3. Add this instance as a key listener for the frame red: listening blue: placing

public class ButtonDemo3 extends JFrame implements ActionListener { private JButton wB, eB …; public ButtonDemo3() { // Add buttons to content pane, // enable one, disable the other wB.addActionListener(this); eB.addActionListener(new BeListener()); } public void actionPerformed(ActionEvent e) { boolean b = eB.isEnabled(); eB.setEnabled(!b); wB.setEnabled(b); } // A listener for eB class BeListener implements ActionListener { public void actionPerformed(ActionEvent e) { boolean b = eB.isEnabled(); eB.setEnabled(!b); wB.setEnabled(b); } 19 Doesn’t work! Can’t reference eB, wB Have a different listener for each button

20 BD3 eB … aPerf(… eB … wB...} wB … BeLis aPerf(… eB … wB...} Make BeListener an inner class. Inside-out rule then gives access to wB, eB BD3 eB … aPerf…(… eB … wB..} wB … BeLis aPerf(… eB … wB...} listens to wBlistens to eB but can’t reference fields

Solution to problem: Make BeListener an inner class. public class ButtonDemo3 extends JFrame implements ActionListener { private JButton wB, eB …; public ButtonDemo3() { … } public void actionPerformed(ActionEvent e) { … } private class BeListener implements ActionListener { … } 21 Just as you can declare variables and methods within a class, you can declare a class within a class Inside-out rule says that methods in here Can reference all the fields and methods We demo this using ButtonDemo3

22 Problem: can’t give a function as a parameter public void m() { … eB.addActionListener(aP); } public void aP(ActionEvent e) { body } Why not just give eB the function to call? Can’t do it in Java! Can in some other languages public void m() { … eB.addActionListener(new C()); } public class C implements IN { public void aP(ActionEvent e) { body } } Java says: provide class C that wraps method; give eB an object of class C C must implement interface IN that has abstract method aP

Have a class for which only one object is created? Use an anonymous class. Use sparingly, and only when the anonymous class has 1 or 2 methods in it, because the syntax is ugly, complex, hard to understand. public class ButtonDemo3 extends Jframe implements ActionListener { private JButton wB, eB …; public ButtonDemo3() { … eB.addActionListener(new BeListener()); } public void actionPerformed(ActionEvent e) { … } private class BeListener implements ActionListener { public void actionPerformed(ActionEvent e) { body } } 23 Only 1 object of BeListener ever created  make anonymous

Using an anonymous class to replace “new BeListener()” BEFORE: eB.addActionListener( new BeListener () ); private class BeListener implements ActionListener { declarations in class } 24 AFTER: eB.addActionListener( new ActionListener () { declarations in class } ); No “constructor” arguments for interface Name of interface

Using an anonymous class to replace “new BeListener()” BEFORE: eB.addActionListener( new BeListener () ); private class BeListener implements ActionListener { public void actionPerformed(ActionEvent e) { … } } 25 AFTER: eB.addActionListener( new ActionListener () { public void actionPerformed(ActionEvent e) { … } } ); No “constructor” arguments for interface Name of interface

Making class anonymous will replace new BeListener() eB.addActionListener( new BeListener () ); private class BeListener implements ActionListener { declarations in class } } 26 Expression that creates object of BeListener 1. Write new2. Write new ActionListener 2. Use name of interface that BeListener implements 3. Write new ActionListener () 3. Put in arguments of constructor call 4. Write new ActionListener () { declarations in class } 4. Put in class body 5. Replace new BeListener() by new-expression

Good luck! 27 UnabletocreateGUIExiting.jpg