Mega Code Archive

 
Categories / Java / Event
 

Sketch

/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O'Reilly  */ // Sketch.java //A sketching application with two dials: one for horizontal movement, one //for vertical movement. The dials are instances of the JogShuttle class. // import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.BoundedRangeModel; import javax.swing.DefaultBoundedRangeModel; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.border.BevelBorder; import javax.swing.border.LineBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.plaf.ComponentUI; 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);   } } //JogShuttle.java //A custom jog shuttle component. (Some VCRs have such a thing for doing //variable speed fast-forward and fast-reverse.) An example of using the //JogShuttle can be found in Sketch.java. // class JogShuttle extends JComponent implements ChangeListener {   private BoundedRangeModel model;   //  The dialInsets property tells how far the dial is inset   //  from the sunken border.   private Insets dialInsets = new Insets(3, 3, 3, 3);   //  The valuePerRevolution property tells how many units the dial   //  takes to make a complete revolution.   private int valuePerRevolution;   //  Constructors   public JogShuttle() {     init(new DefaultBoundedRangeModel());   }   public JogShuttle(BoundedRangeModel m) {     init(m);   }   public JogShuttle(int min, int max, int value) {     init(new DefaultBoundedRangeModel(value, 1, min, max));   }   protected void init(BoundedRangeModel m) {     setModel(m);     valuePerRevolution = m.getMaximum() - m.getMinimum();     setMinimumSize(new Dimension(80, 80));     setPreferredSize(new Dimension(80, 80));     updateUI();   }   public void setUI(JogShuttleUI ui) {     super.setUI(ui);   }   public void updateUI() {     setUI((JogShuttleUI) UIManager.getUI(this));     invalidate();   }   public String getUIClassID() {     return JogShuttleUI.UI_CLASS_ID;   }   public void setModel(BoundedRangeModel m) {     BoundedRangeModel old = model;     if (old != null)       old.removeChangeListener(this);     if (m == null)       model = new DefaultBoundedRangeModel();     else       model = m;     model.addChangeListener(this);     firePropertyChange("model", old, model);   }   public BoundedRangeModel getModel() {     return model;   }   //  Methods   public void resetToMinimum() {     model.setValue(model.getMinimum());   }   public void resetToMaximum() {     model.setValue(model.getMaximum());   }   public void stateChanged(ChangeEvent e) {     repaint();   }   //  Accessors and mutators   public int getMinimum() {     return model.getMinimum();   }   public void setMinimum(int m) {     int old = getMinimum();     if (m != old) {       model.setMinimum(m);       firePropertyChange("minimum", old, m);     }   }   public int getMaximum() {     return model.getMaximum();   }   public void setMaximum(int m) {     int old = getMaximum();     if (m != old) {       model.setMaximum(m);       firePropertyChange("maximum", old, m);     }   }   public int getValue() {     return model.getValue();   }   public void setValue(int v) {     int old = getValue();     if (v != old) {       model.setValue(v);       firePropertyChange("value", old, v);     }   }   //  Display-specific properties   public int getValuePerRevolution() {     return valuePerRevolution;   }   public void setValuePerRevolution(int v) {     int old = getValuePerRevolution();     if (v != old) {       valuePerRevolution = v;       firePropertyChange("valuePerRevolution", old, v);     }     repaint();   }   public void setDialInsets(Insets i) {     dialInsets = i;   }   public void setDialInsets(int top, int left, int bottom, int right) {     dialInsets = new Insets(top, left, bottom, right);   }   public Insets getDialInsets() {     return dialInsets;   } } //JogShuttleUI.java //Fill out the proper UIClassID information for our JogShuttle. // abstract class JogShuttleUI extends ComponentUI {   public static final String UI_CLASS_ID = "JogShuttleUI"; }