1) Graphics类与图形绘制
package GUI;
import java.awt.*;
import java.awt.event.*;
public class DrawLine extends Frame {
public DrawLine()//添加构造方法
{
addWindowListener(new WindowAdapter(){//注册窗口适配器
public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法
dispose(); //释放该窗口
System.exit(0);//停止程序的运行
}
});
this.addMouseListener(new MouseAdapter(){
int orgX;//初始点的横坐标
int orgY;//初始点的纵坐标
public void mousePressed(MouseEvent e)
{
orgX=e.getX();//获得初始点的横坐标
orgY=e.getY();//获得初始点的纵坐标
}
public void mouseReleased(MouseEvent e)
{
Graphics graphics=getGraphics();//定义一个画图对象
graphics.setColor(Color.RED); //设置字体的颜色为红色
graphics.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置字的格式
graphics.drawString(orgX+","+orgY, orgX, orgY);//在初始坐标处划线
graphics.drawString(e.getX()+","+e.getY(), e.getX(), e.getY());//在末坐标处划线
graphics.drawLine(orgX, orgY, e.getX(), e.getY());//根据初始坐标和末坐标画线
}
});
}
public static void main(String[] args) {
System.out.println("starting TestMyButton..");
DrawLine drawLine=new DrawLine();//实例化定义的创库
drawLine.setSize(400, 400);//设置窗口的大小
drawLine.setTitle("TestMyButton");
drawLine.setVisible(true);
}
}
2) 组件重绘的处理
直线类:
package GUI;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyLine {
private int orgX;
private int orgY;
private int endX;
private int endY;
public MyLine(int orgX,int orgY,int endX,int endY)
{
this.orgX=orgX;
this.orgY=orgY;
this.endX=endX;
this.endY=endY;
}
public void drawMe(Graphics g)
{
g.setColor(Color.RED); //设置字体的颜色为红色
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置字的格式
g.drawString(orgX+","+orgY, orgX, orgY);//在初始坐标处划线
g.drawString(endX+","+endY, endX, endY);//在末坐标处划线
g.drawLine(orgX, orgY, endX, endY);
}
}
主类:
package GUI;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class DrawLine extends Frame {
int orgX;//初始点的横坐标
int orgY;//初始点的纵坐标
int endX;
int endY;
Vector vLines=new Vector();
public void paint(Graphics g)
{
Enumeration e=vLines.elements();
while (e.hasMoreElements()) {
MyLine line=(MyLine)e.nextElement();
line.drawMe(g);
}
}
public DrawLine()//添加构造方法
{
addWindowListener(new WindowAdapter(){//注册窗口适配器
public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法
dispose(); //释放该窗口
System.exit(0);//停止程序的运行
}
});
this.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e)
{
orgX=e.getX();//获得初始点的横坐标
orgY=e.getY();//获得初始点的纵坐标
}
public void mouseReleased(MouseEvent e)
{
endX=e.getX();//获得末点横坐标
endY=e.getY();//获得末点纵坐标
vLines.add(new MyLine(orgX,orgY,endX,endY));//存储坐标
repaint();//调用绘图方法,重绘直线
}
});
}
public static void main(String[] args) {
System.out.println("starting TestMyButton..");
DrawLine drawLine=new DrawLine();//实例化定义的创库
drawLine.setSize(400, 400);//设置窗口的大小
drawLine.setTitle("TestMyButton");
drawLine.setVisible(true);
}
}
3) 图像显示
package drawImage;
import java.awt.*;
import java.awt.event.*;
public class DrawImage extends Frame{
Image img=getToolkit().getImage("hero.gif");//加载图像对象
public void paint(Graphics g)
{
while (!g.drawImage(img, 20, 20, this));
}
public DrawImage()//添加构造方法
{
addWindowListener(new WindowAdapter(){//注册窗口适配器
public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法
dispose(); //释放该窗口
System.exit(0);//停止程序的运行
}
});
}
public static void main(String[] args) {
System.out.println("starting DrawImage..");
DrawImage drawImage=new DrawImage();
drawImage.setSize(400, 400);//设置窗口的大小
drawImage.setTitle("TestMyButton");
drawImage.setVisible(true);
}
}
问题:为什么没用到repaint()
4) 双缓冲技术
package drawImage;
import GUI.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class DrawLine1 extends Frame {
int orgX;//初始点的横坐标
int orgY;//初始点的纵坐标
int endX;
int endY;
Image image=null;
Graphics graphics=null;
public void paint(Graphics g)
{
System.out.println("我来了");
g.drawImage(image,20,20,this);//image第一次可以是空的
}
public DrawLine1()//添加构造方法
{
setSize(400, 400);//设置窗口的大小
setTitle("TestMyButton");
setVisible(true);
Dimension d=this.getSize();
image=createImage(d.width, d.height);
graphics=image.getGraphics();
addWindowListener(new WindowAdapter(){//注册窗口适配器
public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法
dispose(); //释放该窗口
System.exit(0);//停止程序的运行
}
});
this.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e)
{
orgX=e.getX();//获得初始点的横坐标
orgY=e.getY();//获得初始点的纵坐标
}
public void mouseReleased(MouseEvent e)
{
endX=e.getX();//获得末点横坐标
endY=e.getY();//获得末点纵坐标
Graphics g=getGraphics();
g.setColor(Color.RED); //设置字体的颜色为红色
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置字的格式
g.drawString(orgX+","+orgY, orgX, orgY);//在初始坐标处划线
g.drawString(endX+","+endY, endX, endY);//在末坐标处划线
g.drawLine(orgX, orgY, endX, endY);
graphics.setColor(Color.RED); //在内存中设置字体的颜色为红色
graphics.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//在内存中设置字的格式
graphics.drawString(orgX+","+orgY, orgX, orgY);//在内存中初始坐标写坐标
graphics.drawString(endX+","+endY, endX, endY);//
graphics.drawLine(orgX, orgY, endX, endY);//在内存中绘制线
}
});
}
public static void main(String[] args) {
System.out.println("starting TestMyButton..");
DrawLine1 drawLine=new DrawLine1();//实例化窗口
}
}