home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 October / Chip_2000-10_cd1.bin / chplus / Java / SimpleDraw / demo / PaintCanvas.java < prev    next >
Text File  |  1999-09-20  |  3KB  |  122 lines

  1. package demo;
  2.  
  3. import java.awt.event.*;
  4. import java.awt.*;
  5.  
  6. /**
  7. * T°φda slou╛φcφ pro vytvo°enφ plßtna. Zachycuje udßlosti "pohyb my╣i"
  8. * a "stisk tlaΦφtka" - proto implementuje uvedenß rozhranφ.
  9. * @see java.awt.event.MouseMotionListener
  10. * @see java.awt.event.ActionListener
  11. */
  12. public class PaintCanvas extends Canvas
  13. implements MouseMotionListener, ActionListener {
  14.    Graphics offGraphics;  // skryt² grafick² kontext
  15.    Image offImage;        // skryt² obrßzek (buffer)
  16.    int oldx, oldy;        // "starΘ" sou°adnice my╣i
  17.  
  18.    /** Konstruktor */
  19.    public PaintCanvas() {
  20.       // nastavenφ barvy pozadφ na bφlou
  21.       setBackground(Color.white);
  22.  
  23.       // registrace sebe (this) jako p°φjemce udßlosti "pohyb my╣i"
  24.       addMouseMotionListener(this);
  25.    }
  26.  
  27.    /**
  28.    * Metoda getMinimumSize() musφ b²t implementovßna kv∙li
  29.    * urΦenφ velikosti pro layout manager.
  30.    * @return minimßlnφ velikost komponenty (plßtna).
  31.    */
  32.    public Dimension getMinimumSize() {
  33.       return new Dimension(300,200);
  34.    }
  35.  
  36.    /**
  37.    * Metoda getPreferredSize() musφ b²t implementovßna kv∙li
  38.    * urΦenφ velikosti pro layout manager.
  39.    * @return preferovanou velikost komponenty (plßtna).
  40.    */
  41.    public Dimension getPreferredSize() {
  42.       return getMinimumSize();
  43.    }
  44.  
  45.    /**
  46.    * Metoda mouseDragged() je volanß p°i pohybu a souΦasnΘm dr╛enφ
  47.    * tlaΦφtka my╣i.
  48.    */
  49.    public void mouseDragged(MouseEvent e) {
  50.       // je-li mo╛no provßd∞t v²stup, vykreslφ Φßru
  51.       if (offGraphics != null)
  52.          offGraphics.drawLine(oldx, oldy, e.getX(), e.getY());
  53.  
  54.       // uschovßnφ sou°adnic my╣i
  55.       oldx = e.getX();
  56.       oldy = e.getY();
  57.  
  58.       // p°ekreslit plßtno!
  59.       repaint();
  60.    }
  61.  
  62.    /**
  63.     * Metoda mouseMoved() je volanß p°i pohybu my╣i (bez stisku tlaΦφtka).
  64.     */
  65.    public void mouseMoved(MouseEvent e) {
  66.       // uschovßnφ sou°adnic my╣i
  67.       oldx = e.getX();
  68.       oldy = e.getY();
  69.    }
  70.  
  71.    /**
  72.     * Metoda actionPerformed() je volanß stisku tlaΦφtka "Clear".
  73.     */
  74.    public void actionPerformed(ActionEvent e) {
  75.       // zru╣enφ skrytΘho bufferu (bude provedeno vymazßnφ)
  76.       offImage = null;
  77.  
  78.       // p°ekreslit plßtno!
  79.       repaint();
  80.    }
  81.  
  82.    /**
  83.     * Metoda update() je volßna p°i p°ekreslovßnφ komponenty.
  84.     * Standardn∞ vyma╛e pozadφ a volß metodu paint().
  85.     * Je p°edefinovßna, aby nedochßzelo k blikßnφ.
  86.     */
  87.    public void update(Graphics g) {
  88.       paint(g);
  89.    }
  90.  
  91.    /**
  92.     * Metoda paint() provßdφ vykreslenφ obsahu plßtna - p°ekopφruje
  93.     * skryt² buffer do grafickΘho kontextu komponenty (parametr g).
  94.     */
  95.    public void paint(Graphics g) {
  96.       int width = getSize().width;
  97.       int height = getSize().height;
  98.  
  99.       if (offImage == null) {
  100.          // vytvo°enφ prßzdnΘho bufferu
  101.          offImage = createImage(width, height);
  102.          offGraphics = offImage.getGraphics();
  103.       }
  104.  
  105.       // nastala zm∞na velikosti komponenty?
  106.       if (offImage.getWidth(this) != width ||
  107.           offImage.getHeight(this) != height) {
  108.  
  109.          // ano - vytvo°it skryt² buffer aktußlnφ velikosti...
  110.          Image img = createImage(width, height);
  111.          offGraphics = img.getGraphics();
  112.  
  113.          // ... a zkopφrovat star² buffer
  114.          offGraphics.drawImage(offImage,0,0,this);
  115.          offImage = img;
  116.       }
  117.  
  118.       // zobrazenφ bufferu do grafickΘho kontextu komponenty
  119.       g.drawImage(offImage,0,0,this);
  120.    }
  121. }
  122.