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 }

最新文章

  1. 后HTML5时代
  2. SQL Server 2012 新特性:新增和修改函数
  3. Solr嵌套子文档的弊端以及一种替代方式
  4. iOS - AppRealTest App 真机测试
  5. IOS开发——使用数据库
  6. Asp.net MVC验证那些事(1)-- 介绍和验证规则使用
  7. bootstrap-tab
  8. 1、android源代码下载及目录分析,和eclipser的跟踪
  9. Postman的使用
  10. 07 day 2
  11. 黄聪:Wordpress 模版技术手册 - WordPress Theme Technical manuals
  12. android项目的的目录结构
  13. 2014.3.6-C语言学习小结
  14. 如何从Apache官网下载apache
  15. Delphi总结使用TStrings的一些技巧
  16. JAVA 异常向上抛和向下抛的优劣势
  17. 使用sed删除拼音的音调
  18. JVM学习记录-类加载时机
  19. VS Less Compiler插件使用
  20. mongodb系列~ mongodb慢语句(1)

热门文章

  1. Android10_原理机制系列_Activity窗口添加到WMS过程
  2. unity 顶点弹性网格效果
  3. Python一行式代码
  4. 安装Ubuntu16.04系统后分辨率底的问题
  5. 硕思logo设计师注册码去哪里找,文末附链接
  6. 如何用EasyRecovery恢复U盘乱码的文件
  7. Codeforces Round #674 (Div. 3) C、D 题解
  8. Python命令行参数定义及注意事项
  9. 第一次UML作业
  10. Python的偏函数