ScrollPane と Canvas

import java.awt.*;
import java.awt.event.*;

public class Test {
	public static void main (String[] args)
	{
		Win win = new Win("スクロールバー");
	}
}

/*******************/
/* クラスWinの定義 */
/*******************/
class Win extends Frame {

	/******************/
	/* コンストラクタ */
	/******************/
	Win (String name)
	{
					// Frameクラスのコンストラクタ(Windowのタイトルを引き渡す)
		super(name);
					// スクロールペインの追加
		ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
		sp.setSize(150, 150);
		sp.setLocation(30, 50);
		add(sp);
					// キャンバスの追加
		TestCanvas tc = new TestCanvas();
		tc.setSize(500, 400);
		add(tc);
		sp.add(tc);
					// Windowの大きさ
		setSize(220, 230);
					// ウィンドウを表示
		setVisible(true);
					// イベントアダプタ
		addWindowListener(new WinEnd());
	}

	/******************************/
	/* 上,左,下,右の余白の設定 */
	/******************************/
	public Insets getInsets()
	{
		return new Insets(35, 10, 10, 10);
	}

	/************/
	/* 終了処理 */
	/************/
	class WinEnd extends WindowAdapter
	{
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}
}

/**************************/
/* クラスTestCanvasの定義 */
/**************************/
class TestCanvas extends Canvas {

	TestCanvas()
	{
		setBackground(Color.white);
	}

	/********/
	/* 描画 */
	/********/
	public void paint (Graphics g)
	{
		int yoyu = 30;
		String message = "ScrolBar Test";
					// 直線(両端)
		g.drawLine(10, yoyu+10, 60, yoyu+60);
					// 正方形(左上,幅,高さ)
		g.drawRect(70, yoyu+10, 50, 50);
					// 塗りつぶした正方形(左上,幅,高さ)
		g.fillRect(130, yoyu+10, 50, 50);
					// 角をとった正方形(左上,幅,高さ,削除部分)
		g.drawRoundRect(190, yoyu+10, 50, 50, 20, 20);
					// 立体正方形(左上,幅,高さ,凹凸)
		g.draw3DRect(250, yoyu+10, 50, 50, true);
		g.draw3DRect(310, yoyu+10, 50, 50, false);
					// 多角形(座標,点の数)
		int x[] = {370, 420, 395, 370};
		int y[] = {yoyu+10, yoyu+10, yoyu+60, yoyu+10};
		int pt = x.length;
		g.drawPolygon(x, y, pt);
					// 円(左上,幅,高さ)
		g.drawOval(10, yoyu+70, 50, 50);
		g.fillOval(70, yoyu+70, 100, 50);
					// 弧(左上,幅,高さ,始点と終点の角度)
		g.drawArc(180, yoyu+70, 100, 50, 30, 200);
					// フォントの設定(50ポイント,TimesRoman Bold)
		Font f = new Font("TimesRoman", Font.BOLD, 50);
		g.setFont(f);
					// 文字列の表示(文字列と開始位置(左下))
						// 文字色:黒
		g.drawString(message, 10, yoyu+180);
						// 文字色:青
		Color c = new Color(0, 0, 255);
		g.setColor(c);
		g.drawString(message, 10, yoyu+240);
						// 文字色:赤
		g.setColor(Color.red);
		g.drawString(message, 10, yoyu+300);
	}
}