1.组件绘图原理

  Java GUI能展示出不同对话框、窗口等等组件外观的本质其实就是绘图。

  在AWT中,真正提供绘图功能的是Graphics对象,在Component中提供了三个方法来完成组件图形的绘制与刷新。

方法名 说明
Paint(Graphics g) 绘制组件的外观
update(Graphics g) 内部调用paint方法,刷新组件的外观
repaint() 调用update方法,刷新组件的外观

  一般情况下,Paint和update由系统调用,如果程序想要重新绘制组件可以使用repaint()。

2.Graphics的使用

  AWT提供了Canvas作为画布,提供了Graphics作为画笔,通过调用Graphics的setColor方法可以改变颜色。

  步骤:

    1.自定义类,继承Canvas类,重写Paint方法完成绘制。

    2.在Paint方法真正的开始绘画之前,通过调用setColor、setFont等方法设置画笔的颜色、字体等属性。

    3.调用画笔的drawXxx方法开始绘画

常用方法

方法名 说明
setColor(Color c) 设置颜色
setFont(Font font) 设置字体
drawLine() 绘画直线
drawRect() 绘画矩形
drawRoundRect() 绘画圆角矩形
drawOval() 绘画椭圆形
drawPolygon() 绘画多边形
drawArc() 绘画圆弧
drawPolyLine() 绘画折线
fillRect() 填充矩形
fillRoundRect() 填充圆角矩形
fillOval() 填充椭圆
fillPolygon() 填充多边形
fillArc() 填充圆弧
drawImage() 绘画位图
 1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.awt.event.WindowAdapter;
6 import java.awt.event.WindowEvent;
7
8 public class simpleDrawDemo {
9 private final String RECT_SHAPE = "rect";
10 private final String OVAL_SHAPE = "oval";
11 private String shape = "";
12
13 Frame frame = new Frame("简单绘图实验");
14
15 Button rect = new Button("绘制矩形");
16 Button oval = new Button("绘制椭圆");
17
18 private class MyCanvas extends Canvas{
19 @Override
20 public void paint(Graphics g){
21 if (shape.equals(RECT_SHAPE)){
22 g.setColor(Color.PINK);
23 g.drawRect(100,100,300,200);
24 }else if (shape.equals(OVAL_SHAPE)){
25 g.setColor(Color.PINK);
26 g.drawOval(100,100,300,200);
27 }
28 }
29 }
30
31 MyCanvas canvas = new MyCanvas();
32
33 public void init(){
34 rect.addActionListener(new ActionListener() {
35 @Override
36 public void actionPerformed(ActionEvent e) {
37 shape = RECT_SHAPE;
38 canvas.repaint();
39 }
40 });
41
42 oval.addActionListener(new ActionListener() {
43 @Override
44 public void actionPerformed(ActionEvent e) {
45 shape = OVAL_SHAPE;
46 canvas.repaint();
47 }
48 });
49
50 frame.addWindowListener(new WindowAdapter() {
51 @Override
52 public void windowClosing(WindowEvent e) {
53 System.exit(0);
54 }
55 });
56 canvas.setPreferredSize(new Dimension(600,400));
57 Box buttonBox = Box.createHorizontalBox();
58 buttonBox.add(rect);
59 buttonBox.add(oval);
60 frame.add(canvas,BorderLayout.NORTH);
61 frame.add(buttonBox,BorderLayout.SOUTH);
62
63 frame.pack();
64 frame.setVisible(true);
65 }
66
67 public static void main(String[] args) {
68 new simpleDrawDemo().init();
69 }
70 }

AWT08-绘图的更多相关文章

  1. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  2. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

  3. echarts+php+mysql 绘图实例

    最近在学习php+mysql,因为之前画图表都是直接在echart的实例demo中修改数据,便想着两相结合练习一下,通过ajax调用后台数据画图表. 我使用的是echart3,相比较第二版,echar ...

  4. html5 canvas常用api总结(二)--绘图API

    canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...

  5. HTML5_04之SVG绘图

    1.关于Canvas绘制图像: 问题:需要绘制多张图片时,必须等待所有图片加载完成才能开始绘制:而每张图片都是异步请求,彼此没有先后顺序,哪一张先加载完成完全无法预测: 方案: var progres ...

  6. HTML5 学习总结(四)——canvas绘图、WebGL、SVG

    一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 ...

  7. AR创意分享:儿童涂鸦遇上程序绘图

    第一节 临摹 小明经常临摹同桌小美的画作. 美术课上,老师表扬了小美的新作. 图1.1 小美的作品<蒙娜·毛虫的微笑> 临,是照着原作画:摹,是用薄纸张蒙在原作上面画. 第二节 借画 小明 ...

  8. C# 一段绘图代码 在form_load事件不能显示图

    今天无意将一段绘图代码 写在form_load事件了,结果不能显示绘图.(代码:Graphics g = this.CreateGraphics();Pen pen = new Pen(Color.R ...

  9. HTML5学习总结——canvas绘制象棋(canvas绘图)

    一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...

  10. Windows Form调用R进行绘图并显示

    R软件功能非常强大,可以很好的进行各类统计,并能输出图形.下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上. 1 前提准备 安装R软件,需要安装32位的R软件,6 ...

随机推荐

  1. NPOT纹理与平铺模式OpenGL规范

    OpenGL规范从2.0开始支持显示边长为非2次幂的Texture,但限制条件是需要环绕模式为CLAMP_TO_EDGE并且过滤模式为NEAREST或者LINEAR. 解除限制的条件是硬件支持OES_ ...

  2. 环境安装和pycharm中一些基本设置

    一.Pycharm的使用和Python环境 1.python和pycharm的安装 python推荐版本3.7/3.8 pycharm选择社区版本 查看python版本在cmd中输入"pyt ...

  3. CorelDRAW中的3D线条表现方法

    CorelDRAW图形设计工具的最优势之一是其强大的交互式工具. 调和工具就是这样一种互动性很强的工具,从表面上看来可能不是那么突出,但功能是真的强啊!一旦发现它的潜力,它很快就会成为经验丰富的Cor ...

  4. CorelDRAW文件损坏的几种解决方法

    以前做好的CorelDRAW文件突然打不开了,或者是死机.非法操作等原因造成CorelDRAW文件损坏,有时打开源文件发现一片空白,源文件保存损坏无法打开怎么办?此时不要着急,你可以试试以下几种办法帮 ...

  5. Guitar Pro吉他指弹入门——双手泛音

    曾经有一段时间在琴行里经常遇到有人来试琴,很多人试弹得曲子就是郑成河的<Flaming>,直译过来就是热情的意思.这首曲子里面有很多泛音存在,吉他泛音类似于钟鸣或者摇铃的声音,是一种令人耳 ...

  6. 电子邮件怎么用EasyRecovery恢复,只需简单5步

    在日常工作中,我们常常会用电子邮件与上事.客户等协商工作事务.电子邮件快捷.方便,慢慢地成为我们工作中不可缺少的沟通工具之一. 然而使用的过程中,你会发现垃圾邮件也越积越多了,平时,我看到积压的垃圾邮 ...

  7. 检查字符串结尾 判断一个字符串(str)是否以指定的字符串(target)结尾。

    function confirmEnding(str, target) { var arr = str.replace(/\s+/g, ""); var bb = arr.subs ...

  8. WPF有关控件和模板样式设计的微软官方文档

    说明 如果你正在使用WPF开发应用程序,相信这篇博客会对你有用.希望你能认真的阅读 正文 此文主要以Button为例进行介绍此文档的组成部分. Button Parts Button控件没有任何命名的 ...

  9. redlock分布式锁真的安全吗

    此文是对http://zhangtielei.com/posts/blog-redlock-reasoning-part2.html文章的个人归纳,如有问题请联系删除 什么是redlock redlo ...

  10. 解决Maven项目中pom.xml文件报错(Failure to transfer....)的问题

    打开pom.xml文件,查看错误,如果错误类型为:Failure to transfer.........之类的,则表明你的pom中依赖的jar包没有完全下载. 解决方法:找到你本地的maven仓库, ...