Java 之 Graphics 繪圖
Graphics 繪圖
Graphics 類是所有圖形上下文的抽象基類,允許應用程式在元件(已經在各種裝置上實現)以及閉屏影象上進行繪製。
建構函式摘要
因為 Graphics 是一個抽象類,所以應用程式不能直接呼叫此構造方法。圖形上下文從其他圖形上下文獲取,或者通過在元件上呼叫 getGraphics() 來建立。
如何獲取 Graphics 物件
注:獲取 Graphics 物件方式有不少,但是能的不多。
一、重寫 paint(Graphics g) 方法
public class MyPanel extends JPanel { @Override protected void paint(Graphics g) { super.paint(g); Graphics myGraphics = g; } }
二、Component.getGraphics()
public class MyFram extend JFrame{ private Graphics graphics; private JPanel panel; public MyFram(){ setTitle("獲取Graphics 物件"); setSize(300,300); setLocation(nwe Point(300,200)); setVisible(true); /** TODO: 獲取 Graphics 物件 因為 JPanel 繼承了 Component 類所以可以呼叫 getGraphics() 方法。 */ graphics = panel.getGraphics(); graphics.drawLine(3,5,200,300); add(panel); } }
此時會出現 NullPointerException 原因: 因為 JPanel、JFrame等類沒有實現 getGraphics() 方法。
所以想要使用 getGraphics() 來獲取物件,使用前確認呼叫 getGraphics() 方法的物件有沒有重寫 getGraphics() 方法。此外,還有別的方法我就不在演示,自行查詢。
方法摘要
1、畫線、畫點
// TODO: 方法宣告
public abstarct void drawLine(int x1,int y1,int x2,int y2);
引數解釋
x1、y1 第一個點的座標;x2、y2 第二個點的座標
示例
// TODO: 畫一條線段
g.drawLine(3,3,50,50);
// TODO: 畫一個點。兩點重合既是畫點。
g.drawLine(100,100,100,100);
2、畫矩形
// 繪製指定矩形邊框,即只是線條矩形
public void drawRect(int x, int y, int width, int height)
// 繪製填充矩形
public abstract void fillRect(int x, int y, int width, int height)
引數解釋
x, y 為矩形左上角的座標點,即位置。 width、height 矩形的寬高。
示例
// TODO: 繪製線條矩形
g.drawRect(80,100,40,25);
// TODO: 設定顏色
g.setColor(Color.yellow);
// TODO: 繪製填充
g.fillRect(20,70,20,30);
效果
3、畫圓角矩形
// 繪製圓角線條矩形
public abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
// 繪製圓角填充矩形
public abstract void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
引數解釋
x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高 arcWidth --> 4 個角弧度的水平直徑 arcHeight --> 4 個角弧度的垂直直徑
示例
// TODO: 繪製圓角線條矩形
g.drawRoundRect(10,10,150,70,40,25);
// TODO: 設定顏色
g.setColor(Color.blue);
// TODO: 繪製圓角填充矩形
g.fillRoundRect(80,100,100,100,60,40);
/**
TODO: 用繪製圓角矩形的方法繪製 圓形
當 width、height、arcWidth、arcHeight 相等,即為 圓。
*/
g.setColor(Color.red);
g.fillRoundRect(80,90,100,100,100,100);
效果
4、畫 3-D 高亮顯示矩形
// 繪製圓角線條矩形
public void draw3DRect(int x, int y, int width, int height, boolean raised)
// 繪製圓角填充矩形
public void fill3DRect(int x, int y, int width, int height, boolean raised)
引數解釋
x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高 raised --> 一個用於確定矩形是凸出平面顯示還是凹入平面顯示的 boolean 值
示例
g.setColor(Color.red);
// TODO: 繪製三維線條矩形
g.draw3DRect(80,100,40,25,true);
g.setColor(Color.yellow);
// TODO: 繪製三維填充矩形
g.fill3DRect(20,70,20,30,false);
效果
5、畫圓弧
// 繪製圓角線條矩形
public abstract void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
// 繪製圓角填充矩形
public abstract void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
引數解釋
x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高 startAngle --> 開始角度 arcAngle --> 相對於開始角度而言,弧跨越的角度。
示例
// TODO: 繪製圓弧線
g.drawArc(10,40,90,50,0,180);
g.setColor(Color.yellow);
// TODO: 繪製填充缺右上角的四分之三的橢圓
g.fillArc(10,100,40,40,0,-270);
效果
6、畫橢圓
// 繪製線條橢圓
public abstract void drawOval(int x, int y, int width, int height)
// 繪製填充橢圓
public abstract void fillOval(int x, int y, int width, int height)
引數解釋
x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高
示例
// TODO: 繪製線條橢圓
g.drawOval(50,50,130,80);
g.setColor(Color.blue);
// TODO: 繪製填充橢圓
g.fillOval(180,180,50,80);
效果
7、畫折線圖
// 繪製 折線圖
public abstract void drawPolyline(int[] xPoints,int[] yPoints,int nPoints)
引數解釋
xPoints - x 座標陣列。 yPoints - y 座標陣列。 nPoints - 點的總數。
示例
// TODO: 橫座標集
int x[] = {50,80,120,180};
// TODO: 縱座標集
int y[] = {150,100,80,70};
// 繪製 折線圖
g.drawPolyline(x,y,4);
效果
8、畫 圖片
// 繪製 指定路徑圖片
public abstract boolean drawImage(Image img,int x,int y, int width,int height,ImageObserver observer)
引數解釋
img --> 要繪製的指定影象。 x - x 座標。 y - y 座標。 width - 矩形的寬度。 height - 矩形的高度。 observer - 轉換了更多影象時要通知的物件。
示例
// TODO: 此路徑為相對路徑,並不是獲取該系統資料夾下路徑圖片。
ImageIcon image = new ImageIcon(this.getClass().getResource("bigdata.jpg"));
// TODO: 根據 icon 獲取 image
Image myImage = image.getImage();
// TODO: 繪製 圖片
g.drawImage(myImage, 0, 0, this.getWidth(), this.getHeight(),this);
效果