コンポーネットへ描画する場合は、
描画対象や、描画ツールを管理するGraphicsクラスを使いますが、
Swingが登場したJava Var 1.2の時に、Graphicsクラスを強化した「Graphics2D」が用意されました。
そして、過去の命令の互換性を保ちつつ、評価した「Graphics2D」が使えるように
次の継承関係にして、内部で使うオブジェクトは「Graphics2D」に変更されました。
これにより、登場前からあるメソッドで使われる型はGraphicsのままで、
以前と同じように使えます。
しかも参照しているオブジェクトは「Graphics2D」になっているので、
強化された「Graphics2D」の機能を使う場合は(Graphics2D)にキャストして
使うことができます。
java.lang.Object
 └java.awt.Graphics
  └java.awt.Graphics2D
Graphics2Dを使うことで、階調をつけた塗りつぶしや、幅指定の線描画が
可能になります。以下で、
ダイアログの楕円描画部(drawOvalメソッド)を以下で変更して確認できます。
グラデーション塗りつぶし
、5.0の幅のを線描画
	
(なお、JDK1.6からRadialGradientPaint円形の階調も可能になっています。)
	public void drawOval(Color color){
		this.setTitle(""/*Integer.toHexString(color.getRGB())*/);//色の16進数値へ変換し、タイトル設定
		Graphics g = (Graphics2D)bufImg.getGraphics();
		Ellipse2D shape = new Ellipse2D.Double(0, 0, imgSize.width, imgSize.height);
		GradientPaint paint = new GradientPaint(
			0, 0, new Color(255, 255, 255, 0), //始点位置と色(左端のは不透明度合い)
			imgSize.width, 0, color, false);//終点位置と色で、変化を繰り返す
		
		
		Ellipse2D shape = new Ellipse2D.Double(0, 0, imgSize.width, imgSize.height);
		BasicStroke stroke = new BasicStroke(5.0f);//線幅を5.0
		g2.setStroke(stroke);//線描画設定
		g2.setPaint(Color.BLACK);//塗りつぶしの情報設定
		g2.draw(shape);//線を描く(輪郭)
		this.paintPanel.brushImg = bufImg;//PaintPanelのブラシを変更
		this.repaint();
	}
Graphics2Dを使う恩恵は、この他にもさまざまあります。
ここでは、透過描画と移動描画を取り上げます。
透過描画では、AlphaCompositeクラスのオブジェクトを、
Graphics2DにsetCompositeにsetCompositeメソッドで設定して使います。
AlphaCompositeオブジェクトは、描画における合成規則や不透明度合いをパラメタにして
getInstanceのstaticメソッドで取得して使います。
下記では、初期の合成規則をSRC_OVER、
不透明度合いを0.5Fにしています。変更して実験してみましょう
また移動描画では、AffineTransformクラスのオブジェクトを用います。
移動の設定を施したAffineTransformオブジェクトを引数にして、
Graphics2DのdrawImageメソッドで描画する形です。
(ここでは行っていませんが、AffineTransformオブジェクトには、回転、拡大などの設定も可能です。)
これらクラスの詳細は次のリンクで調べましょう。
適当なブラシを表示させ、各実験で確認ください。
	
	
	
PaintPanelクラスに次のインスタンス変数を追加します。
(alphaは不透明の度合い設定値で0が完全に透明で、1.0が完全に不透明のブラシとなります。)
そして、パネルへの描画(メモリイメージの描画の設定)
する部分を以下のように変更して実験します。
	public void drawWith(MouseEvent e){
		Point p = e.getPoint();//ドラックした所の座標取得
		Graphics2D g2 = (Graphics2D)this.offscrImg.getGraphics();//描画ツール取得
		AlphaComposite omposite;//イメージを合成(composite)する指定を行うクラス
		omposite = AlphaComposite.getInstance(AlphaComposite., alpha);
		g2.setComposite(omposite);//合成情報を設定
		
		
		
		g2.drawImage(
		this.repaint();//再描画の指示
	}
上記を確認後、このボタンをクリックください。→