home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 October
/
Chip_2000-10_cd1.bin
/
chplus
/
Java
/
SimpleDraw
/
demo
/
PaintCanvas.java
< prev
next >
Wrap
Text File
|
1999-09-20
|
3KB
|
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);
}
}