From 1f3188e52cba7b0599287de2da03facf46f023f1 Mon Sep 17 00:00:00 2001 From: Keiko Katsuragawa <kkatsuragawa@uwaterloo.ca> Date: Wed, 24 Jan 2018 01:30:22 -0500 Subject: [PATCH] add 2-5-EventBinding --- java/2-5-EventBinding/AdapterEvents.java | 53 +++++++++++++++ java/2-5-EventBinding/EventLoop.java | 69 ++++++++++++++++++++ java/2-5-EventBinding/InheritanceEvents.java | 48 ++++++++++++++ java/2-5-EventBinding/InterfaceEvents.java | 48 ++++++++++++++ java/2-5-EventBinding/ListenerEvents.java | 58 ++++++++++++++++ java/2-5-EventBinding/makefile | 15 +++++ java/2-5-EventBinding/readme.md | 13 ++++ 7 files changed, 304 insertions(+) create mode 100644 java/2-5-EventBinding/AdapterEvents.java create mode 100644 java/2-5-EventBinding/EventLoop.java create mode 100644 java/2-5-EventBinding/InheritanceEvents.java create mode 100644 java/2-5-EventBinding/InterfaceEvents.java create mode 100644 java/2-5-EventBinding/ListenerEvents.java create mode 100644 java/2-5-EventBinding/makefile create mode 100644 java/2-5-EventBinding/readme.md diff --git a/java/2-5-EventBinding/AdapterEvents.java b/java/2-5-EventBinding/AdapterEvents.java new file mode 100644 index 0000000..15445f6 --- /dev/null +++ b/java/2-5-EventBinding/AdapterEvents.java @@ -0,0 +1,53 @@ +/* +* CS 349 Java Code Examples +* +* AdapterEvents.java Binding events by creating a child listener +* adapter object. +* +*/ +import javax.swing.JFrame; +import javax.swing.JPanel; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; + +import java.awt.*; + +public class AdapterEvents extends JPanel { + + public static void main(String[] args) { + AdapterEvents panel = new AdapterEvents(); + JFrame f = new JFrame("AdapterEvents"); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setSize(200, 200); + f.setContentPane(panel); + f.setVisible(true); + } + + AdapterEvents() { + this.addMouseMotionListener(new MyMouseMotionListener()); + } + + class MyMouseMotionListener extends MouseMotionAdapter { + + public void mouseDragged(MouseEvent e) { + x = e.getX(); + y = e.getY(); + repaint(); + } + } + + int x; + int y; + int size = 50; + + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setColor(Color.RED); + g2.fillOval(x - size/2, y - size/2, size, size); + } + + + + +} \ No newline at end of file diff --git a/java/2-5-EventBinding/EventLoop.java b/java/2-5-EventBinding/EventLoop.java new file mode 100644 index 0000000..504c245 --- /dev/null +++ b/java/2-5-EventBinding/EventLoop.java @@ -0,0 +1,69 @@ +/* +* CS 349 Java Code Examples +* +* EventLoop.Java Binding events by tapping into the low-level +* java event queue. +* +*/ +import javax.swing.JFrame; +import javax.swing.JPanel; + + +import java.awt.event.MouseEvent; +import java.awt.*; +import java.lang.reflect.InvocationTargetException; + +public class EventLoop extends JPanel { + + EventLoop() + throws InterruptedException, InvocationTargetException { + + EventQueue.invokeAndWait(new Runnable() { + public void run() { + EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); + // replace the current event queue with MyEventQueue + eq.push(new MyEventQueue()); + System.out.println("Run"); + } + }); + } + + public static void main(String[] args) + throws InterruptedException, InvocationTargetException { + + EventLoop panel = new EventLoop(); + JFrame f = new JFrame("EventLoop"); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setSize(200, 200); + f.setContentPane(panel); + f.setVisible(true); + } + + int x; + int y; + int size = 50; + + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setColor(Color.RED); + g2.fillOval(x - size/2, y - size/2, size, size); + } + + + // kind of like an event loop + private class MyEventQueue extends EventQueue { + // mouse events come in here + public void dispatchEvent(AWTEvent e) { + //System.out.println("dispatchEvent " + e.getID() ); + if (e.getID() == MouseEvent.MOUSE_DRAGGED) { + MouseEvent me = (MouseEvent)e; + x = me.getX(); + y = me.getY(); + System.out.println("(" + x + "," + y + ")"); + repaint(); + } + super.dispatchEvent(e); + } + } +} \ No newline at end of file diff --git a/java/2-5-EventBinding/InheritanceEvents.java b/java/2-5-EventBinding/InheritanceEvents.java new file mode 100644 index 0000000..af59cb8 --- /dev/null +++ b/java/2-5-EventBinding/InheritanceEvents.java @@ -0,0 +1,48 @@ +/* +* CS 349 Java Code Examples +* +* InheritanceEvents.java Binding events by extending base class with +* event callback methods. +*/ +import javax.swing.JFrame; +import javax.swing.JPanel; +import java.awt.event.MouseEvent; +import java.awt.*; + +public class InheritanceEvents extends JPanel { + + public static void main(String[] args) { + InheritanceEvents panel = new InheritanceEvents(); + JFrame f = new JFrame("InheritanceEvents"); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setSize(200, 200); + f.setContentPane(panel); + f.setVisible(true); + + // enable events for this JPanel + panel.enableEvents(MouseEvent.MOUSE_MOTION_EVENT_MASK); + } + + protected void processMouseMotionEvent(MouseEvent e) + { + // only detects when button is down WHILE also moving + if (e.getID() == MouseEvent.MOUSE_DRAGGED) { + x = e.getX(); + y = e.getY(); + repaint(); + } + } + + int x; + int y; + int size = 50; + + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setColor(Color.RED); + g2.fillOval(x - size/2, y - size/2, size, size); + } + + +} \ No newline at end of file diff --git a/java/2-5-EventBinding/InterfaceEvents.java b/java/2-5-EventBinding/InterfaceEvents.java new file mode 100644 index 0000000..8aa7aa5 --- /dev/null +++ b/java/2-5-EventBinding/InterfaceEvents.java @@ -0,0 +1,48 @@ +/* +* CS 349 Java Code Examples +* +* InterfaceEvents.java Binding events by implementing event listener +* interface. +*/ +import javax.swing.JFrame; +import javax.swing.JPanel; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; +import java.awt.*; + +public class InterfaceEvents extends JPanel implements MouseMotionListener { + + InterfaceEvents() { + // need to add the listener to this panel + // (panel and listener are the same in this case) + this.addMouseMotionListener(this); + } + + public static void main(String[] args) { + InterfaceEvents panel = new InterfaceEvents(); + JFrame f = new JFrame("InterfaceEvents"); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setSize(200, 200); + f.setContentPane(panel); + f.setVisible(true); + } + + public void mouseDragged(MouseEvent e) { + x = e.getX(); + y = e.getY(); + repaint(); + } + + public void mouseMoved(MouseEvent e) { /* no-op */ } + + int x; + int y; + int size = 50; + + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setColor(Color.RED); + g2.fillOval(x - size/2, y - size/2, size, size); + } +} \ No newline at end of file diff --git a/java/2-5-EventBinding/ListenerEvents.java b/java/2-5-EventBinding/ListenerEvents.java new file mode 100644 index 0000000..decbf85 --- /dev/null +++ b/java/2-5-EventBinding/ListenerEvents.java @@ -0,0 +1,58 @@ +/* +* CS 349 Java Code Examples +* +* ListenerEvents.java Binding events by creating a child object +* which implements the listener interface. +* +*/ +import javax.swing.JFrame; +import javax.swing.JPanel; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; +import java.awt.event.MouseMotionAdapter; + +import java.awt.*; + +public class ListenerEvents extends JPanel { + + public static void main(String[] args) { + ListenerEvents panel = new ListenerEvents(); + JFrame f = new JFrame("ListenerEvents"); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setSize(200, 200); + f.setContentPane(panel); + f.setVisible(true); + } + + ListenerEvents() { + // need to add the listener to this panel + this.addMouseMotionListener(new MyMouseMotionListener()); + } + + // inner class listener + class MyMouseMotionListener implements MouseMotionListener { + + public void mouseDragged(MouseEvent e) { + x = e.getX(); + y = e.getY(); + repaint(); + } + + public void mouseMoved(MouseEvent e) { /* no-op */ } + } + + int x; + int y; + int size = 50; + + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setColor(Color.RED); + g2.fillOval(x - size/2, y - size/2, size, size); + } + + + + +} \ No newline at end of file diff --git a/java/2-5-EventBinding/makefile b/java/2-5-EventBinding/makefile new file mode 100644 index 0000000..c4642a1 --- /dev/null +++ b/java/2-5-EventBinding/makefile @@ -0,0 +1,15 @@ +# super simple makefile +# call it using 'make NAME=name_of_code_file_without_extension' +# (assumes a .java extension) +NAME = "EventLoop" + +all: + @echo "Compiling..." + javac *.java + +run: all + @echo "Running..." + java $(NAME) + +clean: + rm -rf *.class diff --git a/java/2-5-EventBinding/readme.md b/java/2-5-EventBinding/readme.md new file mode 100644 index 0000000..198eb39 --- /dev/null +++ b/java/2-5-EventBinding/readme.md @@ -0,0 +1,13 @@ +## Java event demos + +* `EventLoop.java` Binding events by tapping into the low-level java event queue + +* `InheritanceEvents.java` Binding events by extending base class with event callback methods + +* `InterfaceEvents.java` Binding events by implementing event listener interface + +* `ListenerEvents.java` Binding events by creating a child object which implements the listener interface + +* `AdapterEvents.java` Binding events by creating a child listener adapter object + + \ No newline at end of file -- GitLab