java中Graphics类的使用
繪圖
? 很多程序如各種小游戲都需要在窗口中繪制各種圖形,除此之外,即使在開發(fā)JavaEE項目時, 有 時候也必須"動態(tài)"地向客戶 端生成各種圖形、圖表,比如 圖形驗證碼、統(tǒng)計圖等,這都需要利用AWT的繪圖功能。
組件繪圖原理
? 之前我們已經(jīng)學習過很多組件,例如Button、Frame、Checkbox等等,不同的組件,展示出來的圖形都不一樣,其實這些組件展示出來的圖形,其本質(zhì)就是用AWT的繪圖來完成的。
? 在AWT中,真正提供繪圖功能的是Graphics對象,那么Component組件和Graphics對象存在什么關(guān)系,才能讓Component繪制自身圖形呢?在Component類中,提供了下列三個方法來完成組件圖形的繪制與刷新:
? paint(Graphics g):繪制組件的外觀;
? update(Graphics g):內(nèi)部調(diào)用paint方法,刷新組件外觀;
? repaint():調(diào)用update方法,刷新組件外觀;
? 一般情況下,update和paint方法是由AWT系統(tǒng)負責調(diào)用,如果程序要希望系統(tǒng)重新繪制組件,可以調(diào)用repaint方法完成。
Graphics類的使用
? 實際生活中如果需要畫圖,首先我們得準備一張紙,然后在拿一支畫筆,配和一些顏色,就可以在紙上畫出來各種各樣的圖形,例如圓圈、矩形等等。

程序中繪圖也一樣,也需要畫布,畫筆,顏料等等。AWT中提供了Canvas類充當畫布,提供了Graphics類來充當畫筆,通過調(diào)用Graphics對象的setColor()方法可以給畫筆設(shè)置顏色。
畫圖的步驟:
1.自定義類,繼承Canvas類,重寫paint(Graphics g)方法完成畫圖;
2.在paint方法內(nèi)部,真正開始畫圖之前調(diào)用Graphics對象的setColor()、setFont()等方法設(shè)置畫筆的顏色、字體等屬性;
3.調(diào)用Graphics畫筆的drawXxx()方法開始畫圖。
其實畫圖的核心就在于使用Graphics畫筆在Canvas畫布上畫出什么顏色、什么樣式的圖形,所以核心在畫筆上,下表中列出了Graphics類中常用的一些方法:
| setColor(Color c) | 設(shè)置顏色 |
| setFont(Font font) | 設(shè)置字體 |
| drawLine() | 繪制直線 |
| drawRect() | 繪制矩形 |
| drawRoundRect() | 繪制圓角矩形 |
| drawOval() | 繪制橢圓形 |
| drawPolygon() | 繪制多邊形 |
| drawArc() | 繪制圓弧 |
| drawPolyline() | 繪制折線 |
| fillRect() | 填充矩形區(qū)域 |
| fillRoundRect() | 填充圓角矩形區(qū)域 |
| fillOval() | 填充橢圓區(qū)域 |
| fillPolygon() | 填充多邊形區(qū)域 |
| fillArc() | 填充圓弧對應(yīng)的扇形區(qū)域 |
| 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() {@Overridepublic void actionPerformed(ActionEvent e) {shape = RECT_SHAPE;drawArea.repaint();}});drawOvalBtn.addActionListener(new ActionListener() {@Overridepublic 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);//設(shè)置畫布的大小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{@Overridepublic 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);}}} }?
總結(jié)
以上是生活随笔為你收集整理的java中Graphics类的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JUC —— 常用辅助类
- 下一篇: ubuntu16.0.4安装GNOME3