home *** CD-ROM | disk | FTP | other *** search
Java Source | 1999-09-20 | 3.4 KB | 122 lines |
- package demo;
-
- import java.awt.event.*;
- import java.awt.*;
-
- /**
- * T°φda slou╛φcφ pro vytvo°enφ plßtna. Zachycuje udßlosti "pohyb my╣i"
- * a "stisk tlaΦφtka" - proto implementuje uvedenß rozhranφ.
- * @see java.awt.event.MouseMotionListener
- * @see java.awt.event.ActionListener
- */
- public class PaintCanvas extends Canvas
- implements MouseMotionListener, ActionListener {
- Graphics offGraphics; // skryt² grafick² kontext
- Image offImage; // skryt² obrßzek (buffer)
- int oldx, oldy; // "starΘ" sou°adnice my╣i
-
- /** Konstruktor */
- public PaintCanvas() {
- // nastavenφ barvy pozadφ na bφlou
- setBackground(Color.white);
-
- // registrace sebe (this) jako p°φjemce udßlosti "pohyb my╣i"
- addMouseMotionListener(this);
- }
-
- /**
- * Metoda getMinimumSize() musφ b²t implementovßna kv∙li
- * urΦenφ velikosti pro layout manager.
- * @return minimßlnφ velikost komponenty (plßtna).
- */
- public Dimension getMinimumSize() {
- return new Dimension(300,200);
- }
-
- /**
- * Metoda getPreferredSize() musφ b²t implementovßna kv∙li
- * urΦenφ velikosti pro layout manager.
- * @return preferovanou velikost komponenty (plßtna).
- */
- public Dimension getPreferredSize() {
- return getMinimumSize();
- }
-
- /**
- * Metoda mouseDragged() je volanß p°i pohybu a souΦasnΘm dr╛enφ
- * tlaΦφtka my╣i.
- */
- public void mouseDragged(MouseEvent e) {
- // je-li mo╛no provßd∞t v²stup, vykreslφ Φßru
- if (offGraphics != null)
- offGraphics.drawLine(oldx, oldy, e.getX(), e.getY());
-
- // uschovßnφ sou°adnic my╣i
- oldx = e.getX();
- oldy = e.getY();
-
- // p°ekreslit plßtno!
- repaint();
- }
-
- /**
- * Metoda mouseMoved() je volanß p°i pohybu my╣i (bez stisku tlaΦφtka).
- */
- public void mouseMoved(MouseEvent e) {
- // uschovßnφ sou°adnic my╣i
- oldx = e.getX();
- oldy = e.getY();
- }
-
- /**
- * Metoda actionPerformed() je volanß stisku tlaΦφtka "Clear".
- */
- public void actionPerformed(ActionEvent e) {
- // zru╣enφ skrytΘho bufferu (bude provedeno vymazßnφ)
- offImage = null;
-
- // p°ekreslit plßtno!
- repaint();
- }
-
- /**
- * Metoda update() je volßna p°i p°ekreslovßnφ komponenty.
- * Standardn∞ vyma╛e pozadφ a volß metodu paint().
- * Je p°edefinovßna, aby nedochßzelo k blikßnφ.
- */
- public void update(Graphics g) {
- paint(g);
- }
-
- /**
- * Metoda paint() provßdφ vykreslenφ obsahu plßtna - p°ekopφruje
- * skryt² buffer do grafickΘho kontextu komponenty (parametr g).
- */
- public void paint(Graphics g) {
- int width = getSize().width;
- int height = getSize().height;
-
- if (offImage == null) {
- // vytvo°enφ prßzdnΘho bufferu
- offImage = createImage(width, height);
- offGraphics = offImage.getGraphics();
- }
-
- // nastala zm∞na velikosti komponenty?
- if (offImage.getWidth(this) != width ||
- offImage.getHeight(this) != height) {
-
- // ano - vytvo°it skryt² buffer aktußlnφ velikosti...
- Image img = createImage(width, height);
- offGraphics = img.getGraphics();
-
- // ... a zkopφrovat star² buffer
- offGraphics.drawImage(offImage,0,0,this);
- offImage = img;
- }
-
- // zobrazenφ bufferu do grafickΘho kontextu komponenty
- g.drawImage(offImage,0,0,this);
- }
- }
-