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(Graphicsg)的作用此里面保存的是窗口中的内容 每一次窗体恢复是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类与图形绘制和组件重绘的处理
*此类完成一个直线的功能 并且最小化后自动恢复先前画的内容
**/
publicclassDrawLine extendsFrame {
intgetX;
intgetY;
intendX;
intendY;
VectorvLines= newVector();
//每一次清空缓存后调用的类此类为调用repaint方法后 repaint方法自动调用在此方法我们定义了集合类 画直线式在此集合类内部画的
@Override
publicvoidpaint(Graphics g) {
//TODOAuto-generated method stub
//g.drawLine(getX,getY, endX, endY);
Enumeratione = vLines.elements();
while(e.hasMoreElements()){
MyLineline = (MyLine)e.nextElement();
line.drawMe(g);
}
super.paint(g);
}
publicDrawLine() {
//TODOAuto-generated constructor stub
addWindowListener(newWindowAdapter(){
//内部匿名类定义一个window事件适配器关闭窗体
@Override
publicvoidwindowClosing(WindowEvent e) {
//TODOAuto-generated method stub
super.windowClosing(e);
e.getWindow().dispose();
System.exit(0);
}
});
//内部匿名类定义一个鼠标事件适配器
addMouseListener(newMouseAdapter(){
//鼠标按上的事件
@Override
publicvoidmousePressed(MouseEvent e) {
//TODOAuto-generated method stub
super.mousePressed(e);
getX= e.getX();
getY= e.getY();
}
//鼠标组件按下
@Override
publicvoidmouseReleased(MouseEvent e) {
//TODOAuto-generated method stub
endY=e.getY();
endX=e.getX();
super.mouseReleased(e);
//Graphicsg = getGraphics();
//g.setFont(newFont(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(newMyLine(getX,getY,endX,endY));
//每调用一个repaint方法他都会调用update方法 将所有内容擦出 并调用paint方法
//由于paint方法我们定义了将线条储存并画出来所以每画一次直线 直线都会被显示出来
repaint();
}
});
}
publicstaticvoidmain(String[] args) {
DrawLinedrawLine = newDrawLine();
drawLine.setSize(400,400);
drawLine.setVisible(true);
}
}
实例MyLine类(绘制和重绘操作)
publicclassMyLine {
privateintgetX;
privateintgetY;
privateintendX;
privateintendY;
publicMyLine(intgetX, intgetY, intendX, intendY) {
super();
this.getX= getX;
this.getY= getY;
this.endX= endX;
this.endY= endY;
}
publicvoiddrawMe(Graphics g){
g.setColor(Color.RED);
g.drawString(getX+","+getY,getX,getY);
g.drawString(endX+","+endY,endX,endY);
g.drawLine(getX,getY,endX,endY);
}
}