- Home ›
- Java2Dによる画像処理 ›
- 線属性 ›
- HERE
線の結合方式の設定
広告
線の結合方式の設定を行います。結合方式とは線が連続して描画される時に線と線の結合する部分の形状を指定します。次のコンストラクタを使用します。
BasicStroke public BasicStroke(float width, int cap, int join)
指定された属性を持つ実線の BasicStroke を構築します。デフォルト値でかま わない場合や、ライン接合が JOIN_MITER に指定されていない場合は、 miterlimit パラメータは不要です。 パラメータ: width - BasicStroke の幅 cap - BasicStroke の両端の装飾 join - 輪郭線セグメントの接合部の装飾 例外: IllegalArgumentException - width が負の値の場合 IllegalArgumentException - cap が CAP_BUTT、CAP_ROUND、または CAP_SQUARE のどれでもない場合 IllegalArgumentException - join が JOIN_ROUND、JOIN_BEVEL、または JOIN_MITER のどれでもない場合
1番目の引数に線の太さを表すfloat型の値を指定します。
2番目の引数に線の両端の形状を表すint型の値を指定します。
3番目の引数に線の結合方式を表すint型の値を指定します。指定できる値はBasicStrokeクラスで定義されており次のいずれかです。
値 | 形状 |
---|---|
static int JOIN_BEVEL | 幅の広い輪郭線の外側の角を直線セグメントに接合するようにして輪郭線セグメントを接合します。 |
static int JOIN_MITER | ラインセグメントの外側の端が重なるまで延長して輪郭線セグメントを接合します。 |
static int JOIN_ROUND | ライン幅の半分の長さを半径として、角を丸く切り落として輪郭線セグメントを接合します。 |
具体的には次のように記述します。
public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; BasicStroke wideStroke = new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(50, 50, 160, 180)); }
サンプルプログラム
簡単なサンプルを一度試してみます。
import javax.swing.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; import java.awt.BasicStroke; public class StrokeTest3 extends JPanel{ public static void main(String[] args){ JFrame frame = new JFrame(); StrokeTest3 app = new StrokeTest3(); frame.getContentPane().add(app); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); BasicStroke joinStroke = new BasicStroke(20.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); g2.setStroke(joinStroke); GeneralPath polygon = new GeneralPath(); polygon.moveTo(20, 150); polygon.lineTo(50, 50); polygon.lineTo(80, 150); g2.draw(polygon); polygon.reset(); BasicStroke miterStroke = new BasicStroke(20.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER); g2.setStroke(miterStroke); polygon.moveTo(120, 150); polygon.lineTo(150, 50); polygon.lineTo(180, 150); g2.draw(polygon); polygon.reset(); BasicStroke roundStroke = new BasicStroke(20.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND); g2.setStroke(roundStroke); polygon.moveTo(220, 150); polygon.lineTo(250, 50); polygon.lineTo(280, 150); g2.draw(polygon); } }
上記をコンパイルした後で実行すると次のように表示されます。
( Written by Tatsuo Ikura )