java.awt.BasicStroke

目的
太い点線を引く

関連クラス

今回のソース
////////////////////  Main.java  ////////////////////
class Main
{
	public static void main(String args[])
	{
		new MainWindow();
	}
}
////////////////////////////////////////////////////////////

////////////////////  MainWindow.java  ////////////////////
import java.awt.*;
import java.awt.event.*;

class MainWindow extends Frame
{
	public MainWindow()
	{
		super("BasicStroke Test");

		MyCanvas canvas = new MyCanvas();
		add(canvas, BorderLayout.CENTER);

		WindowListener w_listener = new WindowAdapter()
		{
			public void windowClosing(WindowEvent we)
			{
				System.exit(0);
			}
		};
		addWindowListener(w_listener);

		pack();
		show();
	}
}
////////////////////////////////////////////////////////////

////////////////////  MyCanvas.java  ////////////////////
import java.awt.*;

class MyCanvas extends Canvas
{
	private final Dimension default_size = new Dimension(256, 256);

	public MyCanvas()
	{
		setSize(default_size);
	}

	public void paint(Graphics g)
	{
		Graphics2D g2d = (Graphics2D)g;

		// 点線のパターン
		float[] dash_array = {15.0f, 4.0f, 2.0f, 4.0f};

		// 線の太さ
		float line_width = 1.5f;

		// 線種の選択とGraphics2Dへの設定
		BasicStroke bs = new BasicStroke(line_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL,
											0f, dash_array, 0f);
		g2d.setStroke(bs);

		// 点線の描画
		g2d.drawLine(0, 127, 255, 127);
		g2d.drawRect(0, 0, 255, 255);
		g.drawOval(0, 0, 255, 255);
	}
}
////////////////////////////////////////////////////////////
Source is here. (ZIP Format, 1052Byte, Shift-JIS)

コンパイル&実行
javac Main.java
java Main

説明
(概略)

Java2Dの機能の一つである、BasicStrokeクラスを使って、
線の太さを変えたり、点線を描画出来るようにします。

実行イメージ
図: 妙な線の引き方の実行イメージ

(サンプルプログラムの説明)

点線のパターン
float[] dash_array = {15.0f, 4.0f, 2.0f, 4.0f};の意味するところは、
15pixel描いて、4pixel描かずに進んで、2pixel描いて、4pixel描かずに進んで、
配列の元に戻って、15pixel描いて...ということを意味しています。
つまり、破線のパターンを表しています。

今回のサンプルでは、切り取り線のような点線を描いていますが、
普通の点線を描画することも可能です。
例えば、float[] dash_array = {3.0f, 3.0f};
のように宣言すれば、等間隔の点線を描くことが出来ます。
線種の選択とGraphics2Dへの設定
実は、いまいち意味分かってません(^^;
ということで、細かい設定必要な人は、マニュアルをちゃんと読みましょう。