p { margin-bottom: 0.21cm; }a:link { }
-
Graphics 绘图
-
Component.getGraphics() 返回一个包含 Graphics 类的包含组件屏幕显示对象 Graphics 类提供了显示图像,打印文字的一些方法
-
drawLine (int x1, int y1, int x2, int y2) 在此图形上下文的坐标系中,使用当前颜色在点 (x1, y1) 和 (x2, y2) 之间画一条线。
-
drawString ( String str, int x, int y) 使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。
-
组件重绘的处理
-
组件重绘的原理 图形窗口每一次最小化后 系统就会在显卡中将组件清空 而我们点击恢复按钮的时候,只是将窗口的组件重绘了出来 并没有将除了组件以外的其他任何东西存储起来 这种现象称为曝光
-
paint(Graphics g) 的作用 此里面保存的是窗口中的内容 每一次窗体恢复是 AWT 线程都会调用此方法
-
AWT 线程的调用过程 程序宜直接调用 paint 方法 而需要通过 java.awt.Component.repaint() 方法调用
-
每次调用 repaint 方法时 此方法会自动调用 update 方法 清除所有缓存 并调用 paint 方法 我们就是在 paint 方法里面写恢复语句
-
调用 repaint 方法的步骤
-
调用 repaint 方法
-
从写 prepaint 函数 Component.paint(java.awt.Graphics )
-
使用实例
h4 { margin-top: 0.49cm; margin-bottom: 0.51cm; line-height: 156%; page-break-inside: avoid; }h4.western { font-family: "Arial",sans-serif; font-size: 14pt; }h4.cjk { font-family: "黑体","SimHei"; font-size: 14pt; }h4.ctl { font-family: "DejaVu Sans"; font-size: 14pt; }p { margin-bottom: 0.21cm; }
实例 DrawLine 类
/**
* Graphics 类与图形绘制和组件重绘的处理
* 此类完成一个直线的功能 并且最小化后自动恢复先前画的内容
* */
public class DrawLine extends Frame {
int getX ;
int getY ;
int endX ;
int endY ;
Vector vLines = new Vector();
// 每一次清空缓存后调用的类 此类为调用 repaint 方法后 repaint 方法自动调用 在此方法我们定义了集合类 画直线式在此集合类内部画的
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
//g.drawLine(getX, getY, endX, endY);
Enumeration e = vLines .elements();
while (e.hasMoreElements()){
MyLine line = (MyLine)e.nextElement();
line.drawMe(g);
}
super . paint (g);
}
public DrawLine() {
// TODO Auto-generated constructor stub
addWindowListener( new WindowAdapter(){
// 内部匿名类 定义一个 window 事件适配器 关闭窗体
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
super .windowClosing(e);
e.getWindow().dispose();
System. exit (0);
}
});
// 内部匿名类 定义一个鼠标事件适配器
addMouseListener( new MouseAdapter(){
// 鼠标按上的事件
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
super .mousePressed(e);
getX = e.getX();
getY = e.getY();
}
// 鼠标组件按下
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
endY =e.getY();
endX =e.getX();
super .mouseReleased(e);
// Graphics g = getGraphics();
// g.setFont(new Font(null,Font.CENTER_BASELINE,20));
// g.setColor(Color.RED);
// g.drawString(getX+","+getY, getX, getY);
// g.drawString(e.getX()+","+e.getY(), e.getX(), e.getY());
// g.drawLine(getX, getY, e.getX(), e.getY());
// 存储
vLines .add( new MyLine( getX , getY , endX , endY ));
// 每调用一个 repaint 方法 他都会调用 update 方法 将所有内容擦出 并调用 paint 方法
// 由于 paint 方法我们定义了将线条储存 并画出来所以每画一次直线 直线都会被显示出来
repaint();
}
});
}
public static void main(String[] args) {
DrawLine drawLine = new DrawLine();
drawLine.setSize(400, 400);
drawLine.setVisible( true );
}
}
实例MyLine 类( 绘制和重绘操作)
public class MyLine {
private int getX ;
private int getY ;
private int endX ;
private int endY ;
public MyLine( int getX, int getY, int endX, int endY) {
super ();
this . getX = getX;
this . getY = getY;
this . endX = endX;
this . endY = endY;
}
public void drawMe(Graphics g){
g.setColor(Color. RED );
g.drawString( getX + "," + getY , getX , getY );
g.drawString( endX + "," + endY , endX , endY );
g.drawLine( getX , getY , endX , endY );
}
}