This Java Swing tip demonstrates a sketching application. The application includes two dials: one for horizontal movement, one for vertical movement. The dials are instances of the JogShuttle class.

 import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.util.*;

import javax.swing.*;
import javax.swing.border.*;

public class Sketch extends JPanel
        implements PropertyChangeListener, ActionListener {
    
    JogShuttle shuttle1;
    JogShuttle shuttle2;
    JPanel board;
    JButton clear;
    
    int lastX, lastY;  // Keep track of the last point we drew.
    
    public Sketch() {
        
        super(true);
        
        setLayout(new BorderLayout());
        board = new JPanel(true);
        board.setPreferredSize(new Dimension(300, 300));
        board.setBorder(new LineBorder(Color.black, 5));
        
        clear = new JButton("Clear Drawing Area");
        clear.addActionListener(this);
        
        shuttle1 = new JogShuttle(0, 300, 150);
        lastX = shuttle1.getValue();
        shuttle2 = new JogShuttle(0, 300, 150);
        lastY = shuttle2.getValue();
        
        shuttle1.setValuePerRevolution(100);
        shuttle2.setValuePerRevolution(100);
        
        shuttle1.addPropertyChangeListener(this);
        shuttle2.addPropertyChangeListener(this);
        
        shuttle1.setBorder(new BevelBorder(BevelBorder.RAISED));
        shuttle2.setBorder(new BevelBorder(BevelBorder.RAISED));
        
        add(board, BorderLayout.NORTH);
        add(shuttle1, BorderLayout.WEST);
        add(clear, BorderLayout.CENTER);
        add(shuttle2, BorderLayout.EAST);
    }
    
    public void propertyChange(PropertyChangeEvent e) {
        
        if (e.getPropertyName() == "value") {
            Graphics g = board.getGraphics();
            g.setColor(getForeground());
            g.drawLine(lastX, lastY,
                    shuttle1.getValue(), shuttle2.getValue());
            lastX = shuttle1.getValue();
            lastY = shuttle2.getValue();
        }
    }
    
    public void actionPerformed(ActionEvent e) {
        
        //  The button must have been pressed.
        Insets insets = board.getInsets();
        Graphics g = board.getGraphics();
        g.setColor(board.getBackground());
        g.fillRect(insets.left, insets.top,
                board.getWidth()-insets.left-insets.right,
                board.getHeight()-insets.top-insets.bottom);
    }
    
    public static void main(String[] args) {
        
        UIManager.put(JogShuttleUI.UI_CLASS_ID, "BasicJogShuttleUI");
        Sketch s = new Sketch();
        
        JFrame frame = new JFrame("Sample Sketch Application");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(s);
        frame.pack();
        frame.setVisible(true);
        
    }
}