AWT_绘图_组件绘图原理

news/2024/7/9 2:09:46

组件绘图原理:

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

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

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

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

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

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

    Graphics对象的使用:

AWT中提供了Canvas类充当画布,提供了Graphics类来充当画笔,通过调用Graphics对象的setColor()方法可以给画笔设置颜色。

画图的步骤:

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

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

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

package com.aynu.layout;

import java.awt.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SimpleDraw {

    private final String RECT_SHAPE="rect";
    private final String OVAL_SHAPE="oval";


    private Frame frame = new Frame("这里测试绘图");

    Button btnRect = new Button("绘制矩形");
    Button btnOval = new Button("绘制椭圆");

    //定义一个变量,记录当前要绘制椭圆还是矩形
    private String shape ="";

    //自定义类继承Canves类重写paint(Graphics g)方法完成画图。
    private class MyCanvas extends Canvas{
        @Override
        public void paint(Graphics g) {
            //绘制不同的图形

            if (shape.equals(RECT_SHAPE)){

                //绘制矩形
                g.setColor(Color.black);    //设置画笔颜色为黑色
                g.drawRect(100,100,150,100);

            }  else if (shape.equals(OVAL_SHAPE)){
                //绘制椭圆
                g.setColor(Color.RED);  //设置画笔颜色为红色
                g.drawOval(100,100,150,100);
            }
        }
    }

    //创建自定义的画布对象
    MyCanvas drawArea = new MyCanvas();

    private void init(){

        //组装视图
        btnRect.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //修改标记的值为rect
                shape=RECT_SHAPE;
                drawArea.repaint();
            }
        });

        btnOval.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //修改标记的值为oval
                shape=OVAL_SHAPE;
                drawArea.repaint();
            }
        });

        //创建Panel,承载按钮
        Panel p= new Panel();
        p.add(btnRect);
        p.add(btnOval);

        frame.add(p, BorderLayout.SOUTH);

        //drawArea的大小需要设置
        drawArea.setPreferredSize(new Dimension(300,300));
        frame.add(drawArea);


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

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

 


http://lihuaxi.xjx100.cn/news/1070961.html

相关文章

SLAM论文速递:SLAM—— MID-Fusion:基于八叉树的对象级多实例动态SLAM—4.26(1)

论文信息 题目: MID-Fusion:Octree-based Object-Level Multi-Instance Dynamic SLAMMID-Fusion:基于八叉树的对象级多实例动态SLAM 论文地址: https://ieeexplore.ieee.org/abstract/document/8794371发表期刊: 2019 International Conf…

4.26讨论

一、论文的highlights 1. We propose a review-based model to obtain sentiment ratings. 提出基于评论的模型来获得情感分。 2. We design a new reliability scheme for review and rating. 设计了一个评分和评论的可靠度机制。 3. Ratings and review sentiment ratin…

Spring Boot中的监视器是什么?

Spring Boot中的监视器(monitor)是指一组用于监视应用程序性能和运行状况的工具和指标。Spring Boot包含了许多内置的监视器,可以让同学们实时了解您的应用程序的各种指标。 以下是一个简单的示例,演示如何使用Spring Boot内置的监视器: 1.…

接口和类的声明

package com.msb.test04;/* 1.类是类,接口是接口,它们是同一层次的概念。 2.接口中没有构造器。 3.接口如何声明:interface 4.在JDK1.8之前,接口中只有两部分内容:(1) 常量:固定修饰符:public static final (2)抽象方法:固定修饰符…

Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题

Docker compose-实现多服务、nginx负载均衡、--scale参数解决端口冲突问题 问题:scale参数端口冲突解决方法:nginx实现多服务、负载均衡修改docker-compose.yml配置新增nginx本地配置文件验证启动容器查看容器状态访问web应用 问题:scale参数…

YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案

YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案 1 YARN RCE 漏洞问题问题现象 某客户使用Tenable.sc扫描安全漏洞后反馈,YARN 存在Remote code execution (RCE) 安全漏洞问题,攻击者可在未经过身份验证的情况下通过该漏洞在…

观察者设计模式知多少

目录 目标 概述 实现 推设计模式 拉设计模式 被动观察者设计模式 目标 熟悉观察者设计模式,了解观察者设计模式的使用场景、具体实现(包括:推设计模式、拉设计模式、被动观察者设计模式)。 概述 一、行为设计模式 行为设…

浅谈个人对“孔乙己的长衫“的感受

名人说:往者不可谏,来者犹可追。——《论语微子篇》 创作者:Code_流苏(CSDN) ★温馨提示:以下仅代表个人观点,不代表其它任何人看法。 目录 〇、缘由一、社会对于学历和职业之间的关系认知是怎样的?二、学…