SlideShare a Scribd company logo
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 (13)

PDF
A split screen-viable UI event system - Unite Copenhagen 2019
Unity Technologies
 
PDF
Creating Ext GWT Extensions and Components
Sencha
 
PPTX
Event Handling in JAVA
Srajan Shukla
 
PPTX
Event Handling in Java
Ayesha Kanwal
 
PDF
Unity 13 space shooter game
吳錫修 (ShyiShiou Wu)
 
PPTX
Unity3 d devfest-2014
Vincenzo Favara
 
PDF
JAVA GUI PART III
OXUS 20
 
PDF
The java swing_tutorial
sumitjoshi01
 
DOCX
Android accelerometer sensor tutorial
info_zybotech
 
PPTX
Hack2the future Microsoft .NET Gadgeteer
Lee Stott
 
PDF
Session 12 - Overview of taps, multitouch, and gestures
Vu Tran Lam
 
PPTX
Building a turn-based game prototype using ECS - Unite Copenhagen 2019
Unity Technologies
 
PDF
AWTEventModel
Arjun Shanka
 
A split screen-viable UI event system - Unite Copenhagen 2019
Unity Technologies
 
Creating Ext GWT Extensions and Components
Sencha
 
Event Handling in JAVA
Srajan Shukla
 
Event Handling in Java
Ayesha Kanwal
 
Unity 13 space shooter game
吳錫修 (ShyiShiou Wu)
 
Unity3 d devfest-2014
Vincenzo Favara
 
JAVA GUI PART III
OXUS 20
 
The java swing_tutorial
sumitjoshi01
 
Android accelerometer sensor tutorial
info_zybotech
 
Hack2the future Microsoft .NET Gadgeteer
Lee Stott
 
Session 12 - Overview of taps, multitouch, and gestures
Vu Tran Lam
 
Building a turn-based game prototype using ECS - Unite Copenhagen 2019
Unity Technologies
 
AWTEventModel
Arjun Shanka
 

Viewers also liked (7)

PPT
Chapter11 graphical components
Arifa Fatima
 
DOCX
Course File c++
emailharmeet
 
PPT
Animal Handling Program
DRx.Yogesh Chaudhari
 
PPT
Filehandlinging cp2
Tanmay Baranwal
 
PPT
File Input & Output
PRN USM
 
PPTX
Arrays C#
Raghuveer Guthikonda
 
PPT
Chapter 12 - File Input and Output
Eduardo Bergavera
 
Chapter11 graphical components
Arifa Fatima
 
Course File c++
emailharmeet
 
Animal Handling Program
DRx.Yogesh Chaudhari
 
Filehandlinging cp2
Tanmay Baranwal
 
File Input & Output
PRN USM
 
Chapter 12 - File Input and Output
Eduardo Bergavera
 
Ad

Similar to Java-Events (20)

PDF
7java Events
Adil Jafri
 
PPT
Event handling63
myrajendra
 
PPT
java - topic (event handling notes )1.ppt
adityakanna2
 
PPT
JAVA (CHAPTER 1 EXCEPTION HANDLING) NOTES -PPT
adityakanna2
 
PPTX
What is Event
Asmita Prasad
 
PDF
JAVA PROGRAMMING- GUI Programming with Swing - The Swing Buttons
Jyothishmathi Institute of Technology and Science Karimnagar
 
PDF
java-programming GUI- Event Handling.pdf
doraeshin04
 
PPS
Java session11
Niit Care
 
PDF
Event Handling in Java as per university
Sanjay Kumar
 
PPTX
Java Abstract Window Toolkit (AWT) Presentation. 2024
nehakumari0xf
 
PPTX
Java Abstract Window Toolkit (AWT) Presentation. 2024
kashyapneha2809
 
PPTX
Awt
Rakesh Patil
 
PPT
Java gui event
SoftNutx
 
PPTX
tL20 event handling
teach4uin
 
PPT
unit-6.pptbjjdjdkd ndmdkjdjdjjdkfjjfjfjfj
sangeethajadhav9901
 
PPT
Unit 6 Java
arnold 7490
 
PPTX
EventHandling in object oriented programming
Parameshwar Maddela
 
PDF
Java Week8(A) Notepad
Chaitanya Rajkumar Limmala
 
PPT
Java Event Handling
Shraddha
 
PDF
Java_Comb
Arjun Shanka
 
7java Events
Adil Jafri
 
Event handling63
myrajendra
 
java - topic (event handling notes )1.ppt
adityakanna2
 
JAVA (CHAPTER 1 EXCEPTION HANDLING) NOTES -PPT
adityakanna2
 
What is Event
Asmita Prasad
 
JAVA PROGRAMMING- GUI Programming with Swing - The Swing Buttons
Jyothishmathi Institute of Technology and Science Karimnagar
 
java-programming GUI- Event Handling.pdf
doraeshin04
 
Java session11
Niit Care
 
Event Handling in Java as per university
Sanjay Kumar
 
Java Abstract Window Toolkit (AWT) Presentation. 2024
nehakumari0xf
 
Java Abstract Window Toolkit (AWT) Presentation. 2024
kashyapneha2809
 
Java gui event
SoftNutx
 
tL20 event handling
teach4uin
 
unit-6.pptbjjdjdkd ndmdkjdjdjjdkfjjfjfjfj
sangeethajadhav9901
 
Unit 6 Java
arnold 7490
 
EventHandling in object oriented programming
Parameshwar Maddela
 
Java Week8(A) Notepad
Chaitanya Rajkumar Limmala
 
Java Event Handling
Shraddha
 
Java_Comb
Arjun Shanka
 
Ad

More from Arjun Shanka (20)

PDF
Asp.net w3schools
Arjun Shanka
 
PDF
Php tutorial(w3schools)
Arjun Shanka
 
PDF
Sms several papers
Arjun Shanka
 
PDF
Jun 2012(1)
Arjun Shanka
 
PDF
System simulation 06_cs82
Arjun Shanka
 
PDF
javaexceptions
Arjun Shanka
 
PDF
javainheritance
Arjun Shanka
 
PDF
javarmi
Arjun Shanka
 
PDF
java-06inheritance
Arjun Shanka
 
PDF
hibernate
Arjun Shanka
 
PDF
javapackage
Arjun Shanka
 
PDF
javaarray
Arjun Shanka
 
PDF
swingbasics
Arjun Shanka
 
PDF
spring-tutorial
Arjun Shanka
 
PDF
struts
Arjun Shanka
 
PDF
javathreads
Arjun Shanka
 
PDF
javabeans
Arjun Shanka
 
PPT
72185-26528-StrutsMVC
Arjun Shanka
 
PDF
javanetworking
Arjun Shanka
 
PDF
javaiostream
Arjun Shanka
 
Asp.net w3schools
Arjun Shanka
 
Php tutorial(w3schools)
Arjun Shanka
 
Sms several papers
Arjun Shanka
 
Jun 2012(1)
Arjun Shanka
 
System simulation 06_cs82
Arjun Shanka
 
javaexceptions
Arjun Shanka
 
javainheritance
Arjun Shanka
 
javarmi
Arjun Shanka
 
java-06inheritance
Arjun Shanka
 
hibernate
Arjun Shanka
 
javapackage
Arjun Shanka
 
javaarray
Arjun Shanka
 
swingbasics
Arjun Shanka
 
spring-tutorial
Arjun Shanka
 
struts
Arjun Shanka
 
javathreads
Arjun Shanka
 
javabeans
Arjun Shanka
 
72185-26528-StrutsMVC
Arjun Shanka
 
javanetworking
Arjun Shanka
 
javaiostream
Arjun Shanka
 

Recently uploaded (20)

PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 

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