Java图形化界面---绘图

目录

一、绘图的介绍

二、如何绘图

三、案例


一、绘图的介绍

很多程序如各种游戏都需要在窗口中绘制各种图形,除此之外,即使在开发JavaEE项目时,有时候也必须动态的向客户端生成各种图形,图表,比如图形验证码,统计图等,这都需要利用AWT的绘图功能。

绘图的原理:之前我们已经学习过很多组件,例如Button,Frame等,不同的组件,展示出来的图形都不一样,其实这些组件展示出来的图形,其本质就是利用AWT绘图来完成的。
在AWT中,真正提供绘图功能的是Graphics对象,那么Component组件和Graphics对象存在什么关系,才能让Components绘制自身图形呢?在Components类中,提供了下列三个方法来完成组件图形的绘制与刷新:
paint(Graphics g)   绘制组件的外观
update(Graphics g)  内部调用paint()方法,刷新组件外观
repaint()           调用update方法,刷新组件外观

二、如何绘图

 绘图的步骤
1:自定义类,继承Canvas类,,重写Paint(Graphics g)方法完成画图;
2:在paint方法内部,真正开始图画之前调用Graphics对象的setColor(),setFont()等方法设置笔的颜色,字体等属性
3:调用Graphics画笔的drawxxx()方法开始画图。

 常用的方法:

setColor(Color c)    设置颜色
setFont(Font font)   设置字体
drawLine()           绘制直线
drawRect()           绘制矩形
drawRoundRect()      绘制圆角矩形
drawOval()           绘制椭圆形
drawPolygon()        绘制多边形
drawArc()            绘制圆弧
drawPolyine()        绘制折线
fillRect()           填充矩形区域
fillRoundRect()      填充圆角矩形区域
fillOval()           填充椭圆区域
fillPolygon()        填充多边形区域
fillArc()            填充圆弧对应的扇形区域
drawImage()          绘制位图

三、案例

需求: 制作如图所示的界面,点击对应的按钮绘制其所示的图形。

class Solution {
    //制造组件
    Frame s=new Frame("绘图");
    Button b1=new Button("绘制矩形");
    Button b2=new Button("绘制椭圆");
    private int f=0;
    private class canv extends Canvas{
        @Override
        public void paint(Graphics g) {
            if(f==1){
                //矩形
                g.setColor(Color.red);//设置画笔的颜色
                g.drawRect(50,50,200,200);
            }
            else if(f==2){
                //椭圆
                 g.setColor(Color.BLUE);
                 g.drawOval(50,50,200,100);
            }
        }
    }
    canv can=new canv();

    public void init(){
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                f=1;
                can.repaint();
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                f=2;
                can.repaint();
            }
        });
        Box b=Box.createHorizontalBox();
        b.add(b1);
        b.add(b2);
        can.setPreferredSize(new Dimension(400,400));

        s.add(b,BorderLayout.SOUTH);
        s.add(can);
        s.pack();
        s.setVisible(true);
    }
}



public class Test {
   public static void main(String[] args){
       new Solution().init();
   }
}

猜你喜欢

转载自blog.csdn.net/gaoqiandr/article/details/128631965