Top Banner
Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential www.open-table.org
58

Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

Sep 11, 2018

Download

Documents

doannhan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

Extending Swing to Run Multi-Touch Applications

Michael RieckenJava Capability Leader, Trissential

www.open-table.org

Page 2: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 2

The goal of this presentation is to give you the information that you need to go out and build your own multi-touch device, using Swing as the user interface.

Page 3: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 3

Agenda

Multi-Touch Defined

Delivering User Input

“Regular” Swing Interfaces

Multi-Touch Swing Interfaces

A Quick Sample

Questions

Page 4: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 4

Multi-Touch Defined

Multiple Simultaneous Mouse Inputs

Multiple Simultaneous Keyboard Inputs

Multiple Users

Page 5: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 5

Agenda

Multi-Touch Defined

Delivering User Input

“Regular” Swing Interfaces

Multi-Touch Swing Interfaces

A Quick Sample

Questions

Page 6: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 6

Delivering User Input

Image Processing

► Image Capture ◄

Touch Event Generation

Touch ListenerMouse Listener

Touch → Mouse Touch → Gesture

Gesture Listener

Swing Controls

Page 7: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 7

Three Main Pieces

Process the Image

Generate Events

Get the Image

Page 8: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 8

Default Event Providerpublic void run() { VideoProvider videoProvider =

TableManager.getVideoProvider(); ImageParser imageParse =

TableManager.getImageParser(); while( running ) { VideoFrame frame = videoProvider.getCurrentFrame(); if( frame != null ) { List<Pattern> touches = imageParser.parse(frame); generateEvents( touches ); } }}

Page 9: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 9

Inside the Table

Glass

Projector

Camera

IR LED Array

“Rosco Gray”

Page 10: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 10

Image Acquisition

Easily Modified Web Cam• Remove the IR filter• Add a visible light filter

Page 11: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 11

What an IR Camera SeesIR Video

Page 12: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 12

Infrared Light Source

Simple to Build, but Tricky to Position Properly• Reflected IR Detection• We use 70 880nm IR LEDs (475-1112-ND) in ten arrays of seven lights

each, but other configurations are possible.• Power is taken directly from the computer’s power supply via a 4 pin

Molex connector (12v leads – yellow and black), so it turns on and off with the computer. (This also is how we drive our four cooling fans.)

Other Configurations are Possible• Frustrated Total Internal Refraction• Direct IR• Visible Light• Combinations

Page 13: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 13

Cabinets

Page 14: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 14

Image Acquisition

Software Acquisition• Java Media Framework

• Windows, Solaris, Linux only

Filtering• Multiple Processing Steps Available• Slows Down Processing

Transformation• Correcting distortion due to camera placement. Technically a filter,

but works in a different category.

Page 15: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 15

Getting a Frame Grabber – VideoProviderString devName=

"vfw:Microsoft WDM Image Capture (Win32):0";CaptureDeviceInfo cdi =

CaptureDeviceManager.getDevice(devName);MediaLocator ml = cdi.getLocator();Player player = null;try { player = Manager.createRealizedPlayer(ml);} catch (Exception e) { return; }player.start();

Page 16: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 16

Getting a Frame Grabber – VideoProvider

// Wait a few seconds for camera to initializetry { Thread.sleep(getDelay());} catch (InterruptedException e) { return; }String controlName

= "javax.media.control.FrameGrabbingControl"frameGrabber = (FrameGrabbingControl)

player.getControl( controlName);

Page 17: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 17

Grabbing a Frame – Video Providerpublic VideoFrame getCurrentFrame() { Buffer buf = frameGrabber.grabFrame(); BufferToImage b2i = new BufferToImage( (VideoFormat)buf.getFormat()) Image img = (b2i.createImage(buf)); if( img == null ) { return null; } BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); g.drawImage(img, null, null); JMFVideoFrame frame = new JMFVideoFrame(this, buffImg); return frame;}

Page 18: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 18

Grabbing a Frame – Video Providerpublic VideoFrame getCurrentFrame() { Buffer buf = frameGrabber.grabFrame(); BufferToImage b2i = new BufferToImage( (VideoFormat)buf.getFormat()) Image img = (b2i.createImage(buf)); if( img == null ) { return null; } BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); g.drawImage(img, null, null); JMFVideoFrame frame = new JMFVideoFrame(this, buffImg); return frame;}

Page 19: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 19

Grabbing a Frame – Video Providerpublic VideoFrame getCurrentFrame() { Buffer buf = frameGrabber.grabFrame(); BufferToImage b2i = new BufferToImage( (VideoFormat)buf.getFormat()) Image img = (b2i.createImage(buf)); if( img == null ) { return null; } BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); g.drawImage(img, null, null); JMFVideoFrame frame = new JMFVideoFrame(this, buffImg); return frame;}

Page 20: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 20

Three Main Pieces

► Process the Image ◄

Generate Events

Get the Image

Page 21: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 21

Image Processing

Uses the Image from the Video Provider

Identifies Blobs or other Objects (Patterns)• Potentially Complex Objects like “Dominos”

Gives us a list of Patterns• Image• Location

Page 22: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 22

Finding Patterns

Pluggable Image Parsers

Default Method:• Scan for touches left-to-right, top-to-bottom, skipping pixels• Match to basic shapes• Snip Shape and return

Can Be Made Very Complicated• Identifying Complex Objects• Potential Performance Hit

Page 23: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 23

Three Main Pieces

Process the Image

► Generate Events ◄

Get the Image

Page 24: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 24

Event Generation

Pluggable!

Basic Strategy• Use Pattern List from Previous Call

• New List and Old List

• Match New Pattern List to Old Pattern List • If there is a new pattern near an old pattern and they are the same type,

then this is a drag event.• Mark these matched patterns as “Used”

• Anything unused in the New List is a Engage Event• Give this new pattern a unique ID (sequential)

• Anything unused in the Old List is a Disengage Event

Page 25: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 25

Used Patterns

Old Touches

A1

B

A2

C

New Touches

Moved

Engaged

Disengaged

Page 26: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 26

Used Patterns

Old Touches

A1

B

A2

C

New Touches

Moved

Engaged

Disengaged

A1

A2

A2

Page 27: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 27

Used Patterns

Old Touches

A1

B

A2

C

New Touches

Moved

Engaged

Disengaged

A1

A2

CC

A2

Page 28: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 28

Used Patterns

Old Touches

A1

B

A2

C

New Touches

Moved

Engaged

Disengaged

A1

A2

CC

B

A2

Page 29: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 29

Agenda

Multi-Touch Defined

Delivering User Input

“Regular” Swing Interfaces

Multi-Touch Swing Interfaces

A Quick Sample

Questions

Page 30: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 30

Swing’s Place

Image Processing

Image Capture

Touch Event Generation

Touch Listener► Mouse Listener ◄

► Touch → Mouse ◄ Touch → Gesture

Gesture Listener

► Swing Controls ◄

Page 31: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 31

Touches to Clicks

SimpleSwingTableApplication extends JPanel, receives TableEvents and translates them into plain old Mouse Events

Component c = SwingUtilities.getDeepestComponentAt( this, x, y );

MouseEvent newEvent = new MouseEvent( c, id, time, mods, x, y, 1, false );

c.dispatchEvent( newEvent );

Page 32: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 32

Touches to Clicks

Works With Basic Swing Applications

• Works best with applications designed for a single mouse

• This can also work for multiple mice/inputs/fingers, but only for simple interactions. Remember that focus often gets set to the control that is clicked (which may muck things up).

Page 33: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 33

Touches to Characters

No Keyboard… what’s a boy to do?

Software Keyboard• Configurable location (border layout or overlay*)• Keyboard is simply another Swing Component• Key events are generated in the same way as mouse events, only they

are sent to the control that currently has focus• This is still a single-user keyboard though… but that’s because we’re

still talking about “standard” Swing applications.• The virtual keyboard does not steal focus

Page 34: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 34

Agenda

Multi-Touch Defined

Delivering User Input

“Regular” Swing Interfaces

Multi-Touch Swing Interfaces

A Quick Sample

Questions

Page 35: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 35

Extending Swing

Surprising little to do… for the simple cases

Buttons react well enough to multiple touches so long as there is only one touch per control.

For multiple touches we need to start implementing special classes.

Page 36: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 36

Extending Swing

MTComponent (Multi-Touch component)• Implements TableEventProcessor – rebroadcasts Table Events to

subscribed listeners.• Implements GestureProcessor too.

Then we go down the hierarchy, implementing MT*

You can “roll your own” by implementing TableEventProcessor and GestureProcessor and dispatching events to listeners (TableEventListener and GestureListener)

Page 37: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 37

Swing’s Place

Image Processing

Image Capture

Touch Event Generation

► Touch Listener ◄ Mouse Listener

Touch → Mouse Touch → Gesture

Gesture Listener

► Swing Controls ◄

Page 38: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 38

Extending Swing

The trick here is that we are NOT using the mouse event.

With multiple touches (and multiple users) we must escape the concept of a single control having focus.

Code that relies on focus being set must be modified.

Page 39: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 39

Sending Table Events

// Just like beforeComponent c =

SwingUtilities.getDeepestComponentAt( this, x, y );

// But now we’re sending Table Eventsif( c instanceof TableEventProcessor ) { TableEventProcessor tep = (TableEventProcessor)c; if( event instanceof TableEngagedEvent ) { tep.engaged( (TableEngagedEvent) event ); } // dragged // disengaged}

Page 40: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 40

TableEvent

public abstract class TableEvent {private long eventID;private long groupEventID;private TableEventProvider tableEventProvider;

// Picture & location private Pattern pattern;}

Page 41: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 41

TableDraggedEvent

public class TableDraggedEvent extnds TableEventprivate Pattern startingPattern;private Pattern endingPattern;

private long startTime;private long eventTime;

private double distance;}

Page 42: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 42

Multiple Keyboards

When an MTComponent gets “focus” (when it is touched), it can display a “local” keyboard.You can either have one keyboard per application, which will close automatically –or- you can have multiple keyboards, which must be manually closed.Keyboards send key events to the control to which they’re bound, not to the application. This allows multiple users to enter data at the same time.Of course, you can muck with this to do your own thing…

Page 43: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 43

Gestures

Finger Movements that MEAN Something.Patents on GesturesUser makes a specific motion on the device and it is interpreted as a gesture.Gesture event is sent to the component where the gesture startedIf the gesture requires two or more fingers, then all of the fingers need to be in the same component at their start

Page 44: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 44

Swing’s Place

Image Processing

Image Capture

Touch Event Generation

Touch Listener Mouse Listener

Touch → Mouse ► Touch → Gesture ◄

►Gesture Listener◄

► Swing Controls ◄

Page 45: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 45

Gesture Processing

Each Gesture is tied to an action on an APPLICATION LEVEL.

GestureListener is invoked, passing a Gesture object.

Gesture Object contains a String with the name of the gesture, along with some telemetry that describes the gesture.

Page 46: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 46

Gesture Processing

The user can react to the gesture based on the String. • This is kind of how menus work

Gestures are described in XML and loaded with the application.

Soon, they can be “painted” using a special editor and saved, or composed and saved as part of a user profile.

Page 47: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 47

Defining a Gesture – “L”<SimpleGesture> <gestureName>LDown</gestureName> <actuatorName>fingertip</actuatorName> <actionName>Close</actionName> <Sequence> <Tolerance>...</Tolerance> <State> <pos> <x>0</x> <y>0</y> </pos> </State> <State> <pos> <x>0</x> <y>100</y> </pos> </State>

Page 48: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 48

Defining a Gesture – “L”

<State> <pos> <x>100</x> <y>100</y> </pos> </State> </Sequence></SimpleGesture>

Page 49: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 49

Advanced Gestures

Multiple Sequences • With corresponding time states

Circular Gestures • Just a whole lot easier to use than coding to hit 360 (or 36 or

whatever) points

Page 50: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 50

Responding to Gestures

Target is the Component in Which the Gesture “Started” and implements GestureProcessor

public interface GestureProcessor {public void processGesture( GestureEvent evt );

}

Page 51: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 51

Agenda

Multi-Touch Defined

Delivering User Input

“Regular” Swing Interfaces

Multi-Touch Swing Interfaces

A Quick Sample

Questions

Page 52: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 52

A Quick Examplepublic class FingerPaint extends TableApplication { // lifecycle method public void start() { // create a canvas this.canvas = new BufferedImage( this.width,

this.height, BufferedImage.TYPE_INT_RGB ); }}

Page 53: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 53

A Quick Example

public void dragged(TableDraggedEvent evt) { BufferedImage canvas = getCanvas(); Graphics g = canvas.getGraphics(); Point p1 = evt.getStartingPattern().getCenterPoint(); Point p2 = evt.getEndingPattern().getCenterPoint(); p1 = TableManager.translatePoint( p1 ); p2 = TableManager.translatePoint( p2 ); g.drawArc( p1.x, p1.y, 20, 20, 0, 360 ); g.drawLine(p1.x + 10, p1.y + 10, p2.x + 10, p2.y + 10 ); g.drawArc( p2.x, p2.y, 20, 20, 0, 360 ); this.repaint();}

Page 54: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 54

Agenda

Multi-Touch Defined

Delivering User Input

“Regular” Swing Interfaces

Multi-Touch Swing Interfaces

A Quick Sample

Questions

Page 55: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 55

For More Information

Other Multi-Touch Projects• NUI Group

• http://www.nuigroup.com• C++ / TouchLib

• Whitespaced• http://blog.whitespaced.co.za/• C# Multi-Touch project

• Multi-Pointer X-Server (MPX)• Linux Multi-Touch• http://wearables.unisa.edu.au/mpx/

• More… but you know how to Google

Page 56: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 56

Summary

The Hardware Is Easy… Kind Of• Provided you’re not afraid of a little soldering and a little

woodworking

The Software is Free…

If You Can Code Swing…• You can code multi-touch

Collaborate and Share!• http://www.open-table.org

Page 57: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 57

QUESTIONS

Page 58: Extending Swing to Run Multi-Touch Applications - Oracle · Extending Swing to Run Multi-Touch Applications Michael Riecken Java Capability Leader, Trissential

2008 JavaOneSM Conference | java.sun.com/javaone | 58

Michael RieckenJava Capability Leader, Trissential [email protected] (don’t be shy)