Java-GUI编程之绘图

createh54个月前 (01-06)技术教程46

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

1组件绘图原理

之前我们已经学习过很多组件,例如Button、Frame、Checkbox等等,不同的组件,展示出来的图形都不一样,其实这些组件展示出来的图形,其本质就是用AWT的绘图来完成的。

在AWT中,真正提供绘图功能的是Graphics对象,那么Component组件和Graphics对象存在什么关系,才能让Component绘制自身图形呢?在Component类中,提供了下列三个方法来完成组件图形的绘制与刷新:

paint(Graphics g):绘制组件的外观;

update(Graphics g):内部调用paint方法,刷新组件外观;

repaint():调用update方法,刷新组件外观;

一般情况下,update和paint方法是由AWT系统负责调用,如果程序要希望系统重新绘制组件,可以调用repaint方法完成。

2Graphics类的使用

实际生活中如果需要画图,首先我们得准备一张纸,然后在拿一支画笔,配和一些颜色,就可以在纸上画出来各种各样的图形,例如圆圈、矩形等等。

程序中绘图也一样,也需要画布,画笔,颜料等等。AWT中提供了Canvas类充当画布,提供了Graphics类来充当画笔,通过调用Graphics对象的setColor()方法可以给画笔设置颜色。

画图的步骤:

1.自定义类,继承Canvas类,重写paint(Graphics g)方法完成画图;

2.在paint方法内部,真正开始画图之前调用Graphics对象的setColor()、setFont()等方法设置画笔的颜色、字体等属性;

3.调用Graphics画笔的drawXxx()方法开始画图。

其实画图的核心就在于使用Graphics画笔在Canvas画布上画出什么颜色、什么样式的图形,所以核心在画笔上,下表中列出了Graphics类中常用的一些方法:

方法名称

方法功能

setColor(Color c)

设置颜色

setFont(Font font)

设置字体

drawLine()

绘制直线

drawRect()

绘制矩形

drawRoundRect()

绘制圆角矩形

drawOval()

绘制椭圆形

drawPolygon()

绘制多边形

drawArc()

绘制圆弧

drawPolyline()

绘制折线

fillRect()

填充矩形区域

fillRoundRect()

填充圆角矩形区域

fillOval()

填充椭圆区域

fillPolygon()

填充多边形区域

fillArc()

填充圆弧对应的扇形区域

drawImage()

绘制位图

案例:

使用AWT绘图API,完成下图效果

演示代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class SimpleDraw {

    private final String RECT_SHAPE="rect";
    private final String OVAL_SHAPE="oval";
    private Frame frame = new Frame("这里测试绘图");
    private Button drawRectBtn = new Button("绘制矩形");
    private Button drawOvalBtn = new Button("绘制椭圆");

    //用来保存当前用户需要绘制什么样的图形
    private String shape="";
    private MyCanvas drawArea = new MyCanvas();
    public void init(){

        //为按钮添加点击事件
        drawRectBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                shape = RECT_SHAPE;
                drawArea.repaint();
            }
        });

        drawOvalBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                shape = OVAL_SHAPE;
                drawArea.repaint();
            }
        });

        //定义一个Panel,装载两个按钮
        Panel p = new Panel();
        p.add(drawRectBtn);
        p.add(drawOvalBtn);

        //把panel添加到frame底部
        frame.add(p,BorderLayout.SOUTH);
        
        //设置画布的大小
        drawArea.setPreferredSize(new Dimension(300,200));
        //把画布添加到frame中

        frame.add(drawArea);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new SimpleDraw().init();
    }
    //1.自定义类,继承Canvas类,重写paint方法

    private class MyCanvas extends Canvas{
        @Override
        public void paint(Graphics g) {
            Random r = new Random();

            if (shape.equals(RECT_SHAPE)){
                //绘制矩形
                g.setColor(Color.BLACK);
                g.drawRect(r.nextInt(200),r.nextInt(100),40,60);
            }
            if(shape.equals(OVAL_SHAPE)){
                //绘制椭圆
                g.setColor(Color.RED);
                g.drawOval(r.nextInt(200),r.nextInt(100),60,40);
            }

        }
    }
}

推荐阅读:

Java-GUI编程之菜单组件

Java-GUI编程之事件处理

Java-GUI编程之AWT组件

Java-GUI编程之布局类型

相关文章

JavaGUI——Java图形用户界面

1、Java GUI 概述GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用图形方式显示的计算机操作用户界面,与早期计算机使用的命令行界面相比,图形界面对于...

8款主流Java开发工具详解(99%人都在使用)

优秀的Java开发工具可以极大的提升我们的开发效率,所以今天给大家推荐一波必备Java开发工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。Java开发环境...

使用Java技术实现系统拖拽画页面并生成Vue代码的方法!技术分析

Java语言本身不直接支持生成Vue代码,但可以通过使用Java的代码生成工具或库来实现这一目标。对于实现系统拖拽来画页面的功能,可以考虑使用JavaFX或Swing等GUI工具包来构建可视化界面,并...

Java 图像处理(一)

 曾几何时,Java图像处理已经被认为是太过鸡肋,就连Java的创始公司,在java图像处理方面也是浅尝辄止,可能相比较C++,Java在这方面的处理,确实差强人意。不过Java类库中有一个叫JAI的...

基于Java的壁纸网站+vue

ssm665基于Java的壁纸网站设计与实现+vue绪论课题背景身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化。目前,人们在追求较高物质生活的同时,也在想着如何使...

几道小小的题目一起和大家更进一步的了解 Java (1)

做题规则:不允许进行上机操作。1. 请问以下程序会输出什么?public class Test {public static void main(String[] args) {Parent par...