JTablet gives you open-source (zlib license) access to tablet input in your Java applications and Applets.
This guide is quick: less reading; more programming!
Just include jtablet-thin.jar
. This tiny (21k) jar includes everything you need to detect and use
JTablet!
This is the only complicated part of JTablet.
JTablet 2 is installed by a user, so you need to ensure a compatible version is installed. Out-dated installations will conflict if you use newer features.
The simplest is to use the checkCompatibility method:
public class DetectionApplet extends Applet { public void init() { // Displays alert if an incompatible version of JTablet is detected if (!JTabletExtension.checkCompatibility(this, "1.2.0")) { return; } add(new Label("Installed JTablet version: " + JTabletExtension.getInstalledVersion())); } }
JTablet 2 is based on AWT event listeners, specifically MouseListener and MouseMotionListener. If you've used those, you're already a JTablet expert!
Simply use TabletManager to add a TabletListener to a component:
TabletManager.getDefaultManager().addTabletListener(component, listener);
You can either implement TabletListener and all of its methods, or extend TabletAdapter and specify just the methods you need:
TabletListener listener = new TabletAdapter() { public void cursorDragged(TabletEvent event) { System.out.println("Cursor was dragged! " + event); } };
The TabletEvent object provides all the necessary
information about the cursor that you may need. Get sub-pixel positions with event.getFloatX()
and
getFloatY()
, pressure with getPressure()
, and so on.
TabletListener listener = new TabletAdapter() { public void cursorDragged(TabletEvent event) { System.out.println("Dragging at " + event.getFloatX() + "," + event.getFloatY() + " with pressure " + (event.getPressure() * 100) + "%"); } };
JTablet represents different devices (mouse, stylus, stylus eraser, etc.) as different
TabletDevice objects, accessed with event.getDevice()
.
Use device.getType()
to get the type of device, and other methods to check capabilities of the device.
TabletListener.cursorEntered triggers when new devices enter tablet proximity:
public void cursorEntered(TabletEvent event) { System.out.println(event.getDevice() + " entered component"); } public void cursorExited(TabletEvent event) { System.out.println(event.getDevice() + " left component"); }
I hope that gets you started. Be sure to check out the many more details in the Javadocs! Read on for a step-by-step tutorial to build a drawing Applet.
Let's make a drawing Applet using JTablet. We'll use Java2D for the actual drawing, and start by setting up our canvas (BufferedImage) and painting it to the screen:
public class DrawApplet extends Applet { BufferedImage image; Graphics2D graphics; public void init() { // Create a drawing canvas image = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); graphics = image.createGraphics(); } // Paint the canvas to the screen public void paint(Graphics g) { g.drawImage(image, 0, 0, null); } }
Next, we'll use TabletAdapter to detect cursor drag events:
// Create the tablet listener TabletListener listener = new TabletAdapter() { // Draw circles when the cursor is dragged public void cursorDragged(TabletEvent event) { float radius = event.getPressure() * 10; // Create an ellipse using floating points from TabletEvent graphics.fill(new Ellipse2D.Float( event.getFloatX() - radius, event.getFloatY() - radius, radius * 2, radius * 2 )); repaint(); } };
Then we'll add the listener to the Applet component:
TabletManager.getDefaultManager().addTabletListener(this, listener);
To make it prettier, we can paint the canvas white and enable anti-aliasing and sub-pixel stroke rendering:
// Paint it white graphics.setBackground(Color.WHITE); graphics.clearRect(0, 0, getWidth(), getHeight()); // Enable anti-aliasing and sub-pixel rendering graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
Now let's detect a tablet eraser and switch between drawing black and white. We can do this by adding a cursorEntered event to our listener:
// Detect when a new cursor enters the canvas public void cursorEntered(TabletEvent event) { // Set the color to white if the device is an eraser if (event.getDevice().getType() == TabletDevice.Type.ERASER) { graphics.setColor(Color.WHITE); } else { graphics.setColor(Color.BLACK); } }
This should give you a good starting point. Full example source: DrawApplet.java
Contact me at marcello@cellosoft.com.