java中Graphics类的使用
繪圖
? 很多程序如各種小游戲都需要在窗口中繪制各種圖形,除此之外,即使在開發JavaEE項目時, 有 時候也必須"動態"地向客戶 端生成各種圖形、圖表,比如 圖形驗證碼、統計圖等,這都需要利用AWT的繪圖功能。
組件繪圖原理
? 之前我們已經學習過很多組件,例如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()方法開始畫圖。
其實畫圖的核心就在于使用Graphics畫筆在Canvas畫布上畫出什么顏色、什么樣式的圖形,所以核心在畫筆上,下表中列出了Graphics類中常用的一些方法:
| setColor(Color c) | 設置顏色 |
| setFont(Font font) | 設置字體 |
| drawLine() | 繪制直線 |
| drawRect() | 繪制矩形 |
| drawRoundRect() | 繪制圓角矩形 |
| drawOval() | 繪制橢圓形 |
| drawPolygon() | 繪制多邊形 |
| drawArc() | 繪制圓弧 |
| drawPolyline() | 繪制折線 |
| fillRect() | 填充矩形區域 |
| fillRoundRect() | 填充圓角矩形區域 |
| fillOval() | 填充橢圓區域 |
| fillPolygon() | 填充多邊形區域 |
| fillArc() | 填充圓弧對應的扇形區域 |
| 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);//設置畫布的大小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);}}} }?
總結
以上是生活随笔為你收集整理的java中Graphics类的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JUC —— 常用辅助类
- 下一篇: 正版NOD32升级ID在线申请