AWT08-绘图
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-绘图的更多相关文章
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- echarts+php+mysql 绘图实例
最近在学习php+mysql,因为之前画图表都是直接在echart的实例demo中修改数据,便想着两相结合练习一下,通过ajax调用后台数据画图表. 我使用的是echart3,相比较第二版,echar ...
- html5 canvas常用api总结(二)--绘图API
canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...
- HTML5_04之SVG绘图
1.关于Canvas绘制图像: 问题:需要绘制多张图片时,必须等待所有图片加载完成才能开始绘制:而每张图片都是异步请求,彼此没有先后顺序,哪一张先加载完成完全无法预测: 方案: var progres ...
- HTML5 学习总结(四)——canvas绘图、WebGL、SVG
一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 ...
- AR创意分享:儿童涂鸦遇上程序绘图
第一节 临摹 小明经常临摹同桌小美的画作. 美术课上,老师表扬了小美的新作. 图1.1 小美的作品<蒙娜·毛虫的微笑> 临,是照着原作画:摹,是用薄纸张蒙在原作上面画. 第二节 借画 小明 ...
- C# 一段绘图代码 在form_load事件不能显示图
今天无意将一段绘图代码 写在form_load事件了,结果不能显示绘图.(代码:Graphics g = this.CreateGraphics();Pen pen = new Pen(Color.R ...
- HTML5学习总结——canvas绘制象棋(canvas绘图)
一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...
- Windows Form调用R进行绘图并显示
R软件功能非常强大,可以很好的进行各类统计,并能输出图形.下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上. 1 前提准备 安装R软件,需要安装32位的R软件,6 ...
随机推荐
- 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储
在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...
- webug第十二关:我系统密码忘记了!
第十二关:我系统密码忘记了! 文件上传 直接上传php一句话, 菜刀链接
- 花了三天整理,Spring Cloud微服务如何设计异常处理机制?还看不懂算我输
前言 首先说一下为什么发这篇文章,是这样的.之前和粉丝聊天的时候有聊到在采用Spring Cloud进行微服务架构设计时,微服务之间调用时异常处理机制应该如何设计的问题.我们知道在进行微服务架构设计时 ...
- Beyond Compare-这款检查图片工具真的绝了!
无论是出去旅游,还是参加聚会,在朋友圈分享美美的图片,已经成为了很多都市人的日常.在分享图片前,大多数人都会选择使用滤镜.风格等功能对照片进行一定的美化.但有时候美化的程度比较轻微,连修图的人都无法判 ...
- iMindMap不同视图的应用技巧介绍
在刚开始使用iMindMap思维导图软件时,很多用户会习惯性地使用默认的Mind Map视图.因该视图布局自由,用户可以发挥自我创造力,进行多种形式的思维图表创建. 其实,除此之外,iMindMap还 ...
- MindManager中主题间距/线条粗细的灵活调整
在MindManager中,主题和线条是思维导图的基本元素,只有通过它们才能将要表达的思想呈现.并联系起来.因此,关于它们的属性设置就会多一点,如颜色.宽度.位置等.而调整主题之间的距离及线条的粗细, ...
- 苹果电脑中怎么快速卸载Flash Player和浏览器扩展应用插件
Adobe Flash Player是一款轻量级浏览器插件,帮助你在网页浏览过程中享受更广泛的多媒体体验.是一种拓展,与Java一样,成为安全和隐私问题的重要来源.这些都需要手动删除的Flash是令人 ...
- 思维导图软件iMindMap:生活工作的好帮手
思维导图iMindMap这样的好帮手在生活工作中能帮你打破困境,,至于它有哪些力所能及的事情就是下面小编要跟你讲的: 你是否经常遇到过这样的情况: 作为学生,你觉得学习紧张,虽然三更眠五更起,还是成绩 ...
- D - Number of Multisets 题解(思维dp)
题目链接 题目大意 给你一个数k和n,表示用n个\(1/2^i(i=0,1,2.....)\)组成k有多少种方案数 题目思路 这个dp实属巧妙 设\(dp[i][j]表示i个数构成j\) 这i个数可以 ...
- C#中From窗体判断提示框是否
int ret(变量名1) = command.ExecuteNonQuery(); if (ret(变量名1) > 0)//判断变量名是否大于0 { DialogResult dr(变量名2) ...