package com.graphics;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 1:Graphics類是所有圖形上下文的抽象基類。
*
* 2:Graphics2D繼承了Graphics類,實現了功能更加強大的繪圖操作的集合。
* 由於Graphics2D類是Graphics類的擴展,也是推薦使用的java繪圖類
* 所以本章主要介紹使用Graphics2D類實現JAVA繪圖
*
* 3:Graphics類使用的不同的方法實現不同的繪制
* @author biexiansheng
*
*/
public class DrawCircle extends JFrame{
private final int OVAL_WIDTH=80;//圓形的寬
private final int OVAL_HEIGHT=80;//圓形的高
public DrawCircle(){
super();
initialize();//調用初始化方法
}
//初始化方法
private void initialize(){
this.setSize(300, 200);//設置窗體的大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置窗體的關閉方式
setContentPane(new DrawPanel());//設置窗體面板為繪圖面板對象
this.setTitle("繪圖實例2");//設置窗體標題
}
class DrawPanel extends JPanel{
public void paint(Graphics g){
super.paint(g);
g.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT);//繪制第1個圓形
g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT);//繪制第2個圓形
g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT);//繪制第3個圓形
g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT);//繪制第4個圓形
g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT);//繪制第5個圓形
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DrawCircle dc=new DrawCircle();//初始化對象且調用構造方法
dc.setVisible(true);//窗體可視化
}
}
案例運行結果如下

package com.graphics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
/**
* 1:Graphics2D是繼承Graphics類編寫的,它包含了Graphics類的繪圖方法並添加了更強的功能
* 是推薦使用的繪圖類,
* Graphics2D可以分別使用不同的類表示不同的形狀,如Line2D,Rectangle2D等。
*
* 2:要繪制指定形狀的圖形,需要先創建並初始化該圖類型的對象,這些圖形類必須是Shape接口
* 的實現類,然後使用Graphics2D類的draw()方法繪制該圖形對象或者使用fill()方法填充
* 該圖形對象
* 語法如下
* draw(Shape form)或者fill(Shape form)
* 其中form指實現Shape接口的對象。
* @author biexiansheng
*
*/
public class DrawFrame extends JFrame{
public DrawFrame(){
super();
initialize();//調用初始化方法
}
//初始化方法
public void initialize(){
this.setSize(300, 200);//設置窗體大小
//設置窗體的關閉方式
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
add(new CanvasPanel());//設置窗體面板為繪圖面板對象
this.setTitle("繪圖實例2");//設置窗體標題
}
//創建內部類
class CanvasPanel extends JPanel{
public void paint(Graphics g){
super.paint(g);
Graphics2D g2=(Graphics2D)g;//強制類型轉換位Graphics2D類型
//Graphics2D是推薦使用的繪圖類,但是程序設計中提供的繪圖對象大多是
//Graphics類的實例,這時應該使用強制類型轉換將其轉換為Graphics
Shape[] shapes=new Shape[4];//聲明圖形數組
shapes[0]=new Ellipse2D.Double(5, 5, 100, 100);//創建圓形對象
//創建矩形對象
shapes[1]=new Rectangle2D.Double(110,5,100,100);//
shapes[2]=new Rectangle2D.Double(15, 15, 80, 80);//創建矩形對象
shapes[3]=new Ellipse2D.Double(120, 15, 80, 80);//創建圓形對象
for(Shape shape:shapes){//遍歷圖型數組
Rectangle2D bounds=shape.getBounds2D();
if(bounds.getWidth()==80){
g2.fill(shape);//填充圖形
}else{
g2.draw(shape);//繪制圖形
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DrawFrame df=new DrawFrame();
df.setVisible(true);
}
}
案例運行結果如下,
可以設置顏色,或可以直接使用g2.setColor(Color.RED);
