SlideShare a Scribd company logo
1 of 34
Download to read offline
core


                          programming

    Handling Mouse and
     Keyboard Events


1    © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
Agenda
    • General event-handling strategy
    • Handling events with separate listeners
    • Handling events by implementing interfaces
    • Handling events with named inner classes
    • Handling events with anonymous inner
      classes
    • The standard AWT listener types
    • Subtleties with mouse events
    • Examples


2       Handling Mouse and Keyboard Events   www.corewebprogramming.com
General Strategy
    • Determine what type of listener is of interest
       – 11 standard AWT listener types, described on later slide.
              • ActionListener, AdjustmentListener,
                ComponentListener, ContainerListener,
                FocusListener, ItemListener, KeyListener,
                MouseListener, MouseMotionListener, TextListener,
                WindowListener
    • Define a class of that type
       – Implement interface (KeyListener, MouseListener, etc.)
       – Extend class (KeyAdapter, MouseAdapter, etc.)
    • Register an object of your listener class
      with the window
       – w.addXxxListener(new MyListenerClass());
3
              • E.g., addKeyListener, addMouseListener
     Handling Mouse and Keyboard Events       www.corewebprogramming.com
Handling Events with a
    Separate Listener: Simple Case
    • Listener does not need to call any methods
      of the window to which it is attached
    import java.applet.Applet;
    import java.awt.*;

    public class ClickReporter extends Applet {
      public void init() {
        setBackground(Color.yellow);
        addMouseListener(new ClickListener());
      }
    }



4    Handling Mouse and Keyboard Events   www.corewebprogramming.com
Separate Listener: Simple Case
    (Continued)
    import java.awt.event.*;

    public class ClickListener extends MouseAdapter {
      public void mousePressed(MouseEvent event) {
        System.out.println("Mouse pressed at (" +
                           event.getX() + "," +
                           event.getY() + ").");
      }
    }




5    Handling Mouse and Keyboard Events   www.corewebprogramming.com
Generalizing Simple Case
    • What if ClickListener wants to draw a circle
      wherever mouse is clicked?
    • Why can’t it just call getGraphics to get a
      Graphics object with which to draw?
    • General solution:
       – Call event.getSource to obtain a reference to window or
         GUI component from which event originated
       – Cast result to type of interest
       – Call methods on that reference



6    Handling Mouse and Keyboard Events      www.corewebprogramming.com
Handling Events with Separate
    Listener: General Case
    import java.applet.Applet;
    import java.awt.*;

    public class CircleDrawer1 extends Applet {
      public void init() {
        setForeground(Color.blue);
        addMouseListener(new CircleListener());
      }
    }




7    Handling Mouse and Keyboard Events   www.corewebprogramming.com
Separate Listener: General
    Case (Continued)
    import java.applet.Applet;
    import java.awt.*;
    import java.awt.event.*;

    public class CircleListener extends MouseAdapter {
      private int radius = 25;

        public void mousePressed(MouseEvent event) {
          Applet app = (Applet)event.getSource();
          Graphics g = app.getGraphics();
          g.fillOval(event.getX()-radius,
                     event.getY()-radius,
                     2*radius,
                     2*radius);
        }
    }
8       Handling Mouse and Keyboard Events   www.corewebprogramming.com
Separate Listener: General
    Case (Results)




9   Handling Mouse and Keyboard Events   www.corewebprogramming.com
Case 2: Implementing a
     Listener Interface
     import java.applet.Applet;
     import java.awt.*;
     import java.awt.event.*;

     public class CircleDrawer2 extends Applet
                            implements MouseListener {
       private int radius = 25;

       public void init() {
         setForeground(Color.blue);
         addMouseListener(this);
       }




10    Handling Mouse and Keyboard Events   www.corewebprogramming.com
Implementing a Listener
     Interface (Continued)
         public            void          mouseEntered(MouseEvent event) {}
         public            void          mouseExited(MouseEvent event) {}
         public            void          mouseReleased(MouseEvent event) {}
         public            void          mouseClicked(MouseEvent event) {}

         public void mousePressed(MouseEvent event) {
           Graphics g = getGraphics();
           g.fillOval(event.getX()-radius,
                      event.getY()-radius,
                      2*radius,
                      2*radius);
         }
     }


11       Handling Mouse and Keyboard Events                 www.corewebprogramming.com
Case 3: Named Inner Classes
     import java.applet.Applet;
     import java.awt.*;
     import java.awt.event.*;

     public class CircleDrawer3 extends Applet {
       public void init() {
         setForeground(Color.blue);
         addMouseListener(new CircleListener());
       }




12    Handling Mouse and Keyboard Events   www.corewebprogramming.com
Named Inner Classes
     (Continued)
     • Note: still part of class from previous slide
         private class CircleListener
                       extends MouseAdapter {
           private int radius = 25;

              public void mousePressed(MouseEvent event) {
                Graphics g = getGraphics();
                g.fillOval(event.getX()-radius,
                           event.getY()-radius,
                           2*radius,
                           2*radius);
              }
         }
     }
13       Handling Mouse and Keyboard Events   www.corewebprogramming.com
Case 4: Anonymous Inner
         Classes
     public class CircleDrawer4 extends Applet {
       public void init() {
         setForeground(Color.blue);
         addMouseListener
           (new MouseAdapter() {
              private int radius = 25;

                         public void mousePressed(MouseEvent event) {
                           Graphics g = getGraphics();
                           g.fillOval(event.getX()-radius,
                                      event.getY()-radius,
                                      2*radius,
                                      2*radius);
                         }
                  });
         }
     }
14       Handling Mouse and Keyboard Events         www.corewebprogramming.com
Event Handling Strategies:
     Pros and Cons
     • Separate Listener
        – Advantages
               • Can extend adapter and thus ignore unused methods
               • Separate class easier to manage
        – Disadvantage
               • Need extra step to call methods in main window
     • Main window that implements interface
        – Advantage
               • No extra steps needed to call methods in main
                 window
        – Disadvantage
               • Must implement methods you might not care about

15    Handling Mouse and Keyboard Events        www.corewebprogramming.com
Event Handling Strategies:
     Pros and Cons (Continued)
     • Named inner class
        – Advantages
               • Can extend adapter and thus ignore unused methods
               • No extra steps needed to call methods in main
                 window
        – Disadvantage
               • A bit harder to understand
     • Anonymous inner class
        – Advantages
               • Same as named inner classes
               • Even shorter
        – Disadvantage
               • Much harder to understand
16    Handling Mouse and Keyboard Events       www.corewebprogramming.com
Standard AWT Event Listeners
     (Summary)
                                            Adapter Class
              Listener                        (If Any)          Registration Method
     ActionListener                                            addActionListener
     AdjustmentListener                                        addAdjustmentListener
     ComponentListener                    ComponentAdapter     addComponentListener
     ContainerListener                    ContainerAdapter     addContainerListener
     FocusListener                        FocusAdapter         addFocusListener
     ItemListener                                              addItemListener
     KeyListener                          KeyAdapter           addKeyListener
     MouseListener                        MouseAdapter         addM ouseListener
     MouseMotionListener                  MouseMotionAdapter   addM ouseMotionListener
     TextListener                                              addTextListener
     WindowListener                       WindowAdapter        addWindowListener




17   Handling Mouse and Keyboard Events                        www.corewebprogramming.com
Standard AWT Event Listeners
     (Details)
     • ActionListener
        – Handles buttons and a few other actions
               • actionPerformed(ActionEvent event)
     • AdjustmentListener
        – Applies to scrolling
               • adjustmentValueChanged(AdjustmentEvent event)
     • ComponentListener
        – Handles moving/resizing/hiding GUI objects
               •   componentResized(ComponentEvent event)
               •   componentMoved (ComponentEvent event)
               •   componentShown(ComponentEvent event)
               •   componentHidden(ComponentEvent event)

18    Handling Mouse and Keyboard Events       www.corewebprogramming.com
Standard AWT Event Listeners
     (Details Continued)
     • ContainerListener
        – Triggered when window adds/removes GUI controls
               • componentAdded(ContainerEvent event)
               • componentRemoved(ContainerEvent event)
     • FocusListener
        – Detects when controls get/lose keyboard focus
               • focusGained(FocusEvent event)
               • focusLost(FocusEvent event)




19    Handling Mouse and Keyboard Events         www.corewebprogramming.com
Standard AWT Event Listeners
     (Details Continued)
     • ItemListener
        – Handles selections in lists, checkboxes, etc.
               • itemStateChanged(ItemEvent event)
     • KeyListener
        – Detects keyboard events
               • keyPressed(KeyEvent event) -- any key pressed
                 down
               • keyReleased(KeyEvent event) -- any key released
               • keyTyped(KeyEvent event) -- key for printable char
                   released




20    Handling Mouse and Keyboard Events           www.corewebprogramming.com
Standard AWT Event Listeners
     (Details Continued)
     • MouseListener
        – Applies to basic mouse events
               •   mouseEntered(MouseEvent event)
               •   mouseExited(MouseEvent event)
               •   mousePressed(MouseEvent event)
               •   mouseReleased(MouseEvent event)
               •   mouseClicked(MouseEvent event) -- Release without
                   drag
                     – Applies on release if no movement since press
     • MouseMotionListener
        – Handles mouse movement
               • mouseMoved(MouseEvent event)
               • mouseDragged(MouseEvent event)
21    Handling Mouse and Keyboard Events        www.corewebprogramming.com
Standard AWT Event Listeners
     (Details Continued)
     • TextListener
        – Applies to textfields and text areas
               • textValueChanged(TextEvent event)
     • WindowListener
        – Handles high-level window events
               • windowOpened, windowClosing, windowClosed,
                 windowIconified, windowDeiconified,
                 windowActivated, windowDeactivated
                  – windowClosing particularly useful




22    Handling Mouse and Keyboard Events         www.corewebprogramming.com
Mouse Events: Details
     • MouseListener and MouseMotionListener
       share event types
     • Location of clicks
        – event.getX() and event.getY()
     • Double clicks
        – Determined by OS, not by programmer
        – Call event.getClickCount()
     • Distinguishing mouse buttons
        – Call event.getModifiers() and compare to
          MouseEvent.Button2_MASK for a middle click and
          MouseEvent.Button3_MASK for right click.
        – Can also trap Shift-click, Alt-click, etc.
23    Handling Mouse and Keyboard Events   www.corewebprogramming.com
Simple Example: Spelling-
     Correcting Textfield
     • KeyListener corrects spelling during typing
     • ActionListener completes word on ENTER
     • FocusListener gives subliminal hints




24    Handling Mouse and Keyboard Events   www.corewebprogramming.com
Example: Simple Whiteboard
     import java.applet.Applet;
     import java.awt.*;
     import java.awt.event.*;

     public class SimpleWhiteboard extends Applet {
       protected int lastX=0, lastY=0;

       public void init() {
         setBackground(Color.white);
         setForeground(Color.blue);
         addMouseListener(new PositionRecorder());
         addMouseMotionListener(new LineDrawer());
       }

       protected void record(int x, int y) {
         lastX = x; lastY = y;
       }
25     Handling Mouse and Keyboard Events   www.corewebprogramming.com
Simple Whiteboard (Continued)

     private class PositionRecorder extends MouseAdapter {
       public void mouseEntered(MouseEvent event) {
         requestFocus(); // Plan ahead for typing
         record(event.getX(), event.getY());
       }

         public void mousePressed(MouseEvent event) {
           record(event.getX(), event.getY());
         }
     }
     ...




26   Handling Mouse and Keyboard Events   www.corewebprogramming.com
Simple Whiteboard (Continued)

         ...
         private class LineDrawer extends MouseMotionAdapter {
           public void mouseDragged(MouseEvent event) {
             int x = event.getX();
             int y = event.getY();
             Graphics g = getGraphics();
             g.drawLine(lastX, lastY, x, y);
             record(x, y);
           }
         }
     }




27       Handling Mouse and Keyboard Events   www.corewebprogramming.com
Simple Whiteboard (Results)




28   Handling Mouse and Keyboard Events   www.corewebprogramming.com
Whiteboard: Adding Keyboard
      Events
     import java.applet.Applet;
     import java.awt.*;
     import java.awt.event.*;

     public class Whiteboard extends SimpleWhiteboard {
       protected FontMetrics fm;

       public void init() {
         super.init();
         Font font = new Font("Serif", Font.BOLD, 20);
         setFont(font);
         fm = getFontMetrics(font);
         addKeyListener(new CharDrawer());
       }



29     Handling Mouse and Keyboard Events   www.corewebprogramming.com
Whiteboard (Continued)
         ...
         private class CharDrawer extends KeyAdapter {
           // When user types a printable character,
           // draw it and shift position rightwards.

             public void keyTyped(KeyEvent event) {
               String s = String.valueOf(event.getKeyChar());
               getGraphics().drawString(s, lastX, lastY);
               record(lastX + fm.stringWidth(s), lastY);
             }
         }
     }




30       Handling Mouse and Keyboard Events   www.corewebprogramming.com
Whiteboard (Results)




31   Handling Mouse and Keyboard Events   www.corewebprogramming.com
Summary
     • General strategy
        – Determine what type of listener is of interest
               • Check table of standard types
        – Define a class of that type
               • Extend adapter separately, implement interface,
                 extend adapter in named inner class, extend adapter
                 in anonymous inner class
        – Register an object of your listener class with the window
               • Call addXxxListener
     • Understanding listeners
        – Methods give specific behavior.
               • Arguments to methods are of type XxxEvent
                      – Methods in MouseEvent of particular interest
32    Handling Mouse and Keyboard Events                 www.corewebprogramming.com
core


                          programming

              Questions?


33   © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
Preview
     • Whiteboard had freehand drawing only
        – Need GUI controls to allow selection of other drawing
          methods
     • Whiteboard had only “temporary” drawing
        – Covering and reexposing window clears drawing
        – After cover multithreading, we’ll see solutions to this
          problem
               • Most general is double buffering
     • Whiteboard was “unshared”
        – Need network programming capabilities so that two
          different whiteboards can communicate with each other


34    Handling Mouse and Keyboard Events            www.corewebprogramming.com

More Related Content

What's hot

A split screen-viable UI event system - Unite Copenhagen 2019
A split screen-viable UI event system - Unite Copenhagen 2019A split screen-viable UI event system - Unite Copenhagen 2019
A split screen-viable UI event system - Unite Copenhagen 2019Unity Technologies
 
Creating Ext GWT Extensions and Components
Creating Ext GWT Extensions and ComponentsCreating Ext GWT Extensions and Components
Creating Ext GWT Extensions and ComponentsSencha
 
Event Handling in JAVA
Event Handling in JAVAEvent Handling in JAVA
Event Handling in JAVASrajan Shukla
 
Event Handling in Java
Event Handling in JavaEvent Handling in Java
Event Handling in JavaAyesha Kanwal
 
JAVA GUI PART III
JAVA GUI PART IIIJAVA GUI PART III
JAVA GUI PART IIIOXUS 20
 
The java swing_tutorial
The java swing_tutorialThe java swing_tutorial
The java swing_tutorialsumitjoshi01
 
Android accelerometer sensor tutorial
Android accelerometer sensor tutorialAndroid accelerometer sensor tutorial
Android accelerometer sensor tutorialinfo_zybotech
 
Hack2the future Microsoft .NET Gadgeteer
Hack2the future Microsoft .NET GadgeteerHack2the future Microsoft .NET Gadgeteer
Hack2the future Microsoft .NET GadgeteerLee Stott
 
Session 12 - Overview of taps, multitouch, and gestures
Session 12 - Overview of taps, multitouch, and gestures Session 12 - Overview of taps, multitouch, and gestures
Session 12 - Overview of taps, multitouch, and gestures Vu Tran Lam
 
Building a turn-based game prototype using ECS - Unite Copenhagen 2019
Building a turn-based game prototype using ECS - Unite Copenhagen 2019Building a turn-based game prototype using ECS - Unite Copenhagen 2019
Building a turn-based game prototype using ECS - Unite Copenhagen 2019Unity Technologies
 

What's hot (13)

A split screen-viable UI event system - Unite Copenhagen 2019
A split screen-viable UI event system - Unite Copenhagen 2019A split screen-viable UI event system - Unite Copenhagen 2019
A split screen-viable UI event system - Unite Copenhagen 2019
 
Creating Ext GWT Extensions and Components
Creating Ext GWT Extensions and ComponentsCreating Ext GWT Extensions and Components
Creating Ext GWT Extensions and Components
 
Event Handling in JAVA
Event Handling in JAVAEvent Handling in JAVA
Event Handling in JAVA
 
Event Handling in Java
Event Handling in JavaEvent Handling in Java
Event Handling in Java
 
Unity 13 space shooter game
Unity 13 space shooter gameUnity 13 space shooter game
Unity 13 space shooter game
 
Unity3 d devfest-2014
Unity3 d devfest-2014Unity3 d devfest-2014
Unity3 d devfest-2014
 
JAVA GUI PART III
JAVA GUI PART IIIJAVA GUI PART III
JAVA GUI PART III
 
The java swing_tutorial
The java swing_tutorialThe java swing_tutorial
The java swing_tutorial
 
Android accelerometer sensor tutorial
Android accelerometer sensor tutorialAndroid accelerometer sensor tutorial
Android accelerometer sensor tutorial
 
Hack2the future Microsoft .NET Gadgeteer
Hack2the future Microsoft .NET GadgeteerHack2the future Microsoft .NET Gadgeteer
Hack2the future Microsoft .NET Gadgeteer
 
Session 12 - Overview of taps, multitouch, and gestures
Session 12 - Overview of taps, multitouch, and gestures Session 12 - Overview of taps, multitouch, and gestures
Session 12 - Overview of taps, multitouch, and gestures
 
Building a turn-based game prototype using ECS - Unite Copenhagen 2019
Building a turn-based game prototype using ECS - Unite Copenhagen 2019Building a turn-based game prototype using ECS - Unite Copenhagen 2019
Building a turn-based game prototype using ECS - Unite Copenhagen 2019
 
AWTEventModel
AWTEventModelAWTEventModel
AWTEventModel
 

Viewers also liked

Viewers also liked (7)

Chapter11 graphical components
Chapter11 graphical componentsChapter11 graphical components
Chapter11 graphical components
 
Course File c++
Course File c++Course File c++
Course File c++
 
Animal Handling Program
Animal Handling ProgramAnimal Handling Program
Animal Handling Program
 
Filehandlinging cp2
Filehandlinging cp2Filehandlinging cp2
Filehandlinging cp2
 
File Input & Output
File Input & OutputFile Input & Output
File Input & Output
 
Arrays C#
Arrays C#Arrays C#
Arrays C#
 
Chapter 12 - File Input and Output
Chapter 12 - File Input and OutputChapter 12 - File Input and Output
Chapter 12 - File Input and Output
 

Similar to Java-Events

Similar to Java-Events (20)

7java Events
7java Events7java Events
7java Events
 
JEDI Slides-Intro2-Chapter20-GUI Event Handling.pdf
JEDI Slides-Intro2-Chapter20-GUI Event Handling.pdfJEDI Slides-Intro2-Chapter20-GUI Event Handling.pdf
JEDI Slides-Intro2-Chapter20-GUI Event Handling.pdf
 
What is Event
What is EventWhat is Event
What is Event
 
Event handling63
Event handling63Event handling63
Event handling63
 
Awt event
Awt eventAwt event
Awt event
 
Advance ui development and design
Advance ui  development and design Advance ui  development and design
Advance ui development and design
 
engineeringdsgtnotesofunitfivesnists.ppt
engineeringdsgtnotesofunitfivesnists.pptengineeringdsgtnotesofunitfivesnists.ppt
engineeringdsgtnotesofunitfivesnists.ppt
 
Gu iintro(java)
Gu iintro(java)Gu iintro(java)
Gu iintro(java)
 
Gui
GuiGui
Gui
 
Java
JavaJava
Java
 
AWT
AWT AWT
AWT
 
JAVA PROGRAMMING- GUI Programming with Swing - The Swing Buttons
JAVA PROGRAMMING- GUI Programming with Swing - The Swing ButtonsJAVA PROGRAMMING- GUI Programming with Swing - The Swing Buttons
JAVA PROGRAMMING- GUI Programming with Swing - The Swing Buttons
 
Java awt
Java awtJava awt
Java awt
 
14a-gui.ppt
14a-gui.ppt14a-gui.ppt
14a-gui.ppt
 
The java rogramming swing _tutorial for beinners(java programming language)
The java rogramming swing _tutorial for beinners(java programming language)The java rogramming swing _tutorial for beinners(java programming language)
The java rogramming swing _tutorial for beinners(java programming language)
 
openFrameworks 007 - events
openFrameworks 007 - eventsopenFrameworks 007 - events
openFrameworks 007 - events
 
event-handling.pptx
event-handling.pptxevent-handling.pptx
event-handling.pptx
 
Flash Lite & Touch: build an iPhone-like dynamic list
Flash Lite & Touch: build an iPhone-like dynamic listFlash Lite & Touch: build an iPhone-like dynamic list
Flash Lite & Touch: build an iPhone-like dynamic list
 
EventBus for Android
EventBus for AndroidEventBus for Android
EventBus for Android
 
libGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame AnimationlibGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame Animation
 

More from Arjun Shanka (20)

Asp.net w3schools
Asp.net w3schoolsAsp.net w3schools
Asp.net w3schools
 
Php tutorial(w3schools)
Php tutorial(w3schools)Php tutorial(w3schools)
Php tutorial(w3schools)
 
Sms several papers
Sms several papersSms several papers
Sms several papers
 
Jun 2012(1)
Jun 2012(1)Jun 2012(1)
Jun 2012(1)
 
System simulation 06_cs82
System simulation 06_cs82System simulation 06_cs82
System simulation 06_cs82
 
javaexceptions
javaexceptionsjavaexceptions
javaexceptions
 
javainheritance
javainheritancejavainheritance
javainheritance
 
javarmi
javarmijavarmi
javarmi
 
java-06inheritance
java-06inheritancejava-06inheritance
java-06inheritance
 
hibernate
hibernatehibernate
hibernate
 
javapackage
javapackagejavapackage
javapackage
 
javaarray
javaarrayjavaarray
javaarray
 
swingbasics
swingbasicsswingbasics
swingbasics
 
spring-tutorial
spring-tutorialspring-tutorial
spring-tutorial
 
struts
strutsstruts
struts
 
javathreads
javathreadsjavathreads
javathreads
 
javabeans
javabeansjavabeans
javabeans
 
72185-26528-StrutsMVC
72185-26528-StrutsMVC72185-26528-StrutsMVC
72185-26528-StrutsMVC
 
javanetworking
javanetworkingjavanetworking
javanetworking
 
javaiostream
javaiostreamjavaiostream
javaiostream
 

Recently uploaded

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 

Recently uploaded (20)

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 

Java-Events

  • 1. core programming Handling Mouse and Keyboard Events 1 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
  • 2. Agenda • General event-handling strategy • Handling events with separate listeners • Handling events by implementing interfaces • Handling events with named inner classes • Handling events with anonymous inner classes • The standard AWT listener types • Subtleties with mouse events • Examples 2 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 3. General Strategy • Determine what type of listener is of interest – 11 standard AWT listener types, described on later slide. • ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener, ItemListener, KeyListener, MouseListener, MouseMotionListener, TextListener, WindowListener • Define a class of that type – Implement interface (KeyListener, MouseListener, etc.) – Extend class (KeyAdapter, MouseAdapter, etc.) • Register an object of your listener class with the window – w.addXxxListener(new MyListenerClass()); 3 • E.g., addKeyListener, addMouseListener Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 4. Handling Events with a Separate Listener: Simple Case • Listener does not need to call any methods of the window to which it is attached import java.applet.Applet; import java.awt.*; public class ClickReporter extends Applet { public void init() { setBackground(Color.yellow); addMouseListener(new ClickListener()); } } 4 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 5. Separate Listener: Simple Case (Continued) import java.awt.event.*; public class ClickListener extends MouseAdapter { public void mousePressed(MouseEvent event) { System.out.println("Mouse pressed at (" + event.getX() + "," + event.getY() + ")."); } } 5 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 6. Generalizing Simple Case • What if ClickListener wants to draw a circle wherever mouse is clicked? • Why can’t it just call getGraphics to get a Graphics object with which to draw? • General solution: – Call event.getSource to obtain a reference to window or GUI component from which event originated – Cast result to type of interest – Call methods on that reference 6 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 7. Handling Events with Separate Listener: General Case import java.applet.Applet; import java.awt.*; public class CircleDrawer1 extends Applet { public void init() { setForeground(Color.blue); addMouseListener(new CircleListener()); } } 7 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 8. Separate Listener: General Case (Continued) import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CircleListener extends MouseAdapter { private int radius = 25; public void mousePressed(MouseEvent event) { Applet app = (Applet)event.getSource(); Graphics g = app.getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } } 8 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 9. Separate Listener: General Case (Results) 9 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 10. Case 2: Implementing a Listener Interface import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CircleDrawer2 extends Applet implements MouseListener { private int radius = 25; public void init() { setForeground(Color.blue); addMouseListener(this); } 10 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 11. Implementing a Listener Interface (Continued) public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseClicked(MouseEvent event) {} public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } } 11 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 12. Case 3: Named Inner Classes import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CircleDrawer3 extends Applet { public void init() { setForeground(Color.blue); addMouseListener(new CircleListener()); } 12 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 13. Named Inner Classes (Continued) • Note: still part of class from previous slide private class CircleListener extends MouseAdapter { private int radius = 25; public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } } } 13 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 14. Case 4: Anonymous Inner Classes public class CircleDrawer4 extends Applet { public void init() { setForeground(Color.blue); addMouseListener (new MouseAdapter() { private int radius = 25; public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } }); } } 14 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 15. Event Handling Strategies: Pros and Cons • Separate Listener – Advantages • Can extend adapter and thus ignore unused methods • Separate class easier to manage – Disadvantage • Need extra step to call methods in main window • Main window that implements interface – Advantage • No extra steps needed to call methods in main window – Disadvantage • Must implement methods you might not care about 15 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 16. Event Handling Strategies: Pros and Cons (Continued) • Named inner class – Advantages • Can extend adapter and thus ignore unused methods • No extra steps needed to call methods in main window – Disadvantage • A bit harder to understand • Anonymous inner class – Advantages • Same as named inner classes • Even shorter – Disadvantage • Much harder to understand 16 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 17. Standard AWT Event Listeners (Summary) Adapter Class Listener (If Any) Registration Method ActionListener addActionListener AdjustmentListener addAdjustmentListener ComponentListener ComponentAdapter addComponentListener ContainerListener ContainerAdapter addContainerListener FocusListener FocusAdapter addFocusListener ItemListener addItemListener KeyListener KeyAdapter addKeyListener MouseListener MouseAdapter addM ouseListener MouseMotionListener MouseMotionAdapter addM ouseMotionListener TextListener addTextListener WindowListener WindowAdapter addWindowListener 17 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 18. Standard AWT Event Listeners (Details) • ActionListener – Handles buttons and a few other actions • actionPerformed(ActionEvent event) • AdjustmentListener – Applies to scrolling • adjustmentValueChanged(AdjustmentEvent event) • ComponentListener – Handles moving/resizing/hiding GUI objects • componentResized(ComponentEvent event) • componentMoved (ComponentEvent event) • componentShown(ComponentEvent event) • componentHidden(ComponentEvent event) 18 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 19. Standard AWT Event Listeners (Details Continued) • ContainerListener – Triggered when window adds/removes GUI controls • componentAdded(ContainerEvent event) • componentRemoved(ContainerEvent event) • FocusListener – Detects when controls get/lose keyboard focus • focusGained(FocusEvent event) • focusLost(FocusEvent event) 19 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 20. Standard AWT Event Listeners (Details Continued) • ItemListener – Handles selections in lists, checkboxes, etc. • itemStateChanged(ItemEvent event) • KeyListener – Detects keyboard events • keyPressed(KeyEvent event) -- any key pressed down • keyReleased(KeyEvent event) -- any key released • keyTyped(KeyEvent event) -- key for printable char released 20 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 21. Standard AWT Event Listeners (Details Continued) • MouseListener – Applies to basic mouse events • mouseEntered(MouseEvent event) • mouseExited(MouseEvent event) • mousePressed(MouseEvent event) • mouseReleased(MouseEvent event) • mouseClicked(MouseEvent event) -- Release without drag – Applies on release if no movement since press • MouseMotionListener – Handles mouse movement • mouseMoved(MouseEvent event) • mouseDragged(MouseEvent event) 21 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 22. Standard AWT Event Listeners (Details Continued) • TextListener – Applies to textfields and text areas • textValueChanged(TextEvent event) • WindowListener – Handles high-level window events • windowOpened, windowClosing, windowClosed, windowIconified, windowDeiconified, windowActivated, windowDeactivated – windowClosing particularly useful 22 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 23. Mouse Events: Details • MouseListener and MouseMotionListener share event types • Location of clicks – event.getX() and event.getY() • Double clicks – Determined by OS, not by programmer – Call event.getClickCount() • Distinguishing mouse buttons – Call event.getModifiers() and compare to MouseEvent.Button2_MASK for a middle click and MouseEvent.Button3_MASK for right click. – Can also trap Shift-click, Alt-click, etc. 23 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 24. Simple Example: Spelling- Correcting Textfield • KeyListener corrects spelling during typing • ActionListener completes word on ENTER • FocusListener gives subliminal hints 24 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 25. Example: Simple Whiteboard import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class SimpleWhiteboard extends Applet { protected int lastX=0, lastY=0; public void init() { setBackground(Color.white); setForeground(Color.blue); addMouseListener(new PositionRecorder()); addMouseMotionListener(new LineDrawer()); } protected void record(int x, int y) { lastX = x; lastY = y; } 25 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 26. Simple Whiteboard (Continued) private class PositionRecorder extends MouseAdapter { public void mouseEntered(MouseEvent event) { requestFocus(); // Plan ahead for typing record(event.getX(), event.getY()); } public void mousePressed(MouseEvent event) { record(event.getX(), event.getY()); } } ... 26 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 27. Simple Whiteboard (Continued) ... private class LineDrawer extends MouseMotionAdapter { public void mouseDragged(MouseEvent event) { int x = event.getX(); int y = event.getY(); Graphics g = getGraphics(); g.drawLine(lastX, lastY, x, y); record(x, y); } } } 27 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 28. Simple Whiteboard (Results) 28 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 29. Whiteboard: Adding Keyboard Events import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Whiteboard extends SimpleWhiteboard { protected FontMetrics fm; public void init() { super.init(); Font font = new Font("Serif", Font.BOLD, 20); setFont(font); fm = getFontMetrics(font); addKeyListener(new CharDrawer()); } 29 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 30. Whiteboard (Continued) ... private class CharDrawer extends KeyAdapter { // When user types a printable character, // draw it and shift position rightwards. public void keyTyped(KeyEvent event) { String s = String.valueOf(event.getKeyChar()); getGraphics().drawString(s, lastX, lastY); record(lastX + fm.stringWidth(s), lastY); } } } 30 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 31. Whiteboard (Results) 31 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 32. Summary • General strategy – Determine what type of listener is of interest • Check table of standard types – Define a class of that type • Extend adapter separately, implement interface, extend adapter in named inner class, extend adapter in anonymous inner class – Register an object of your listener class with the window • Call addXxxListener • Understanding listeners – Methods give specific behavior. • Arguments to methods are of type XxxEvent – Methods in MouseEvent of particular interest 32 Handling Mouse and Keyboard Events www.corewebprogramming.com
  • 33. core programming Questions? 33 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
  • 34. Preview • Whiteboard had freehand drawing only – Need GUI controls to allow selection of other drawing methods • Whiteboard had only “temporary” drawing – Covering and reexposing window clears drawing – After cover multithreading, we’ll see solutions to this problem • Most general is double buffering • Whiteboard was “unshared” – Need network programming capabilities so that two different whiteboards can communicate with each other 34 Handling Mouse and Keyboard Events www.corewebprogramming.com