java.awt.Graphics 是一个抽象类åQŒå…¶ä½œç”¨æ˜¯å®šä¹‰ä¸€ä¸ªçœŸæ£çš„工具åQŒç”¨æ¥æŽ¥å—图形æ“作ã€?/strong>
表一åQšä¼ 递一个对 Graphics 的引用的 JDK æ–ÒŽ(gu¨©)³•
java.awt | Canvas | paint(Graphics g) |
Component | paint(Graphics g) | |
Component | paintAll(Graphics g) | |
Component | print(Graphics g) | |
Component | printAll(Graphics g) | |
Component | update(Graphics g) | |
Container | paint(Graphics g) | |
Container | paintComponents(Graphics g) | |
Container | print(Graphics g) | |
Container | printComponents(Graphics g) | |
ScrollPane | printComponents(Graphics g) | |
java.beans | Property-Editor | paintValue(Graphics g, Rectangle r) |
Property-EditorSupport | paintValue(Graphics g, Rectangle r) |
表二åQšè¿”å›?Graphics 引用çš?JDK æ–ÒŽ(gu¨©)³•
java.awt | Component | getGraphics() |
Image | getGraphics() | |
PrintJob | getGraphics() | |
Graphics | create() | |
Graphics | create(intx, int y, int w, int h) |
Graphics ¾cÕdï–è¡?个主è¦çš„èŒè´£åQ?/strong>
· 讄¡½®å’ŒèŽ·å–图形傿•°ã€?/p>
· åœ¨è¾“å‡ø™®¾å¤‡ä¸æ‰§è¡Œå›‘ÖÅžæ“作ã€?/p>
得到构äšgçš?Graphics 的引用有2¿U方法:(x¨¬)
· é‡è² 表一 ä¸çš„æ–ÒŽ(gu¨©)³•åQˆä¼ é€?Graphics 的引用)
· 调用 表二 ä¸çš„æ–ÒŽ(gu¨©)³•åQˆè¿”å›?Graphics 的副本)
Graphics 对象的寿�/strong>
除了使用 表二 的方法得到的 Graphics 的副本外åQŒä‹Éç”?表一 的方法得到的 Graphics çš„å¼•ç”¨åªæœ‰åœ¨æ–ÒŽ(gu¨©)³•的执行过½E‹ä¸æ‰æœ‰æ•ˆï¼ˆä¾‹å¦‚é‡è²çš?paint() å’?update() ½{‰æ–¹æ³•)。一旦方法返回,引用ž®†ä¸å†æœ‰æ•ˆã€?/p>
通过使用 表二 的方法得到的 Graphics 的对象ä‹É用完åŽéœ€è¦è°ƒç”?Graphics.dispose() æ–ÒŽ(gu¨©)³•处ç†ã€?/p>
// ½E‹åºç‰‡æ–
public void someMethodInAComponent(){
Graphics g = getGraphics();
if(g != null){
try{
// ...
// ...
}
finally{
g.dispose();
}
}
}
Graphics ¾c»è¿˜æä¾›2个方法创å»?Graphics 对象åQ?/strong>
· Graphics create()
创徾_„¡¡®çš?Graphics 副本ã€?/p>
· Graphics create(int x, int y, int w, int h)
创å¾ä¸€ä¸ªå‰¯æœ¬ï¼Œä½†æ˜¯åQŒå˜å…ƒæŒ‡å®šä¸€ä¸ªåã^¿U»é‡ (x, y) 和一个新的剪贴矩å½?(x, y, w, h)。create(int, int, int, int) ˜q”回çš?Graphics çš„åŽŸç‚¹è¢«è½¬æ¢æˆ?(x, y) çš„åæ ‡ï¼Œä½†æ˜¯å‰ªè„“(chu¨¤ng)矩åŞ转æ¢ä¸ºåŽŸå‰ªè„“(chu¨¤ng)矩åŞ和指定矩形的交集ã€?/p>
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class CreateTest extends Applet{
private Image image;
public void init(){
image = getImage(getCodeBase(),"lena.jpg");
try{
MediaTracker mt = new MediaTracker(this);
mt.addImage(image,0);
mt.waitForID(0);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
public void paint(Graphics g){
Graphics copy = g.create(image.getWidth(this),0,image.getWidth(this),image.getHeight(this));
try{
System.out.println("g: " + g.getClip().toString());
System.out.println("copy: " + copy.getClip().toString());
g.drawImage(image,0,0,this);
copy.drawImage(image,0,0,this);
}
finally{
copy.dispose();
}
}
}