先端の形状の設定

広告

線の先端の形状の設定を行います。次のコンストラクタを使用します。

指定された属性を持つ実線の 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型の値を指定します。指定できる値はBasicStrokeクラスで定義されており次のいずれかです。

形状
static int CAP_BUTT装飾を付けずに、閉じられていない部分輪郭線および破線セグメントを終了します。
static int CAP_ROUNDペン幅の半分の長さを半径とした丸い装飾を付けて、閉じられていない部分輪郭線および破線セグメントを終了します。
static int CAP_SQUAREライン幅の半分の長さに等しい距離だけセグメントの先端を延長する正方形を付けて、閉じられていない部分輪郭線および破線セグメントを終了します。

3番目の引数に線の結合方式を設定しますがこちらは次のページで解説しますので取り合えずデフォルトの「BasicStroke.JOIN_MITER」を指定しておいて下さい。

具体的には次のように記述します。

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));
}

サンプルプログラム

簡単なサンプルを一度試してみます。

StrokeTest2.java

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;
import java.awt.BasicStroke;
import java.awt.Color;

public class StrokeTest2 extends JPanel{

  public static void main(String[] args){
    JFrame frame = new JFrame();

    StrokeTest2 app = new StrokeTest2();
    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 buttStroke
      = new BasicStroke(25.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
    g2.setStroke(buttStroke);

    g2.draw(new Line2D.Double(50, 30, 230, 30));

    BasicStroke roundStroke
      = new BasicStroke(25.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
    g2.setStroke(roundStroke);

    g2.draw(new Line2D.Double(50, 80, 230, 80));

    BasicStroke squareStroke
      = new BasicStroke(25.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER);
    g2.setStroke(squareStroke);

    g2.draw(new Line2D.Double(50, 130, 230, 130));

/*
    BasicStroke normalStroke = new BasicStroke(2.0f);
    g2.setStroke(normalStroke);
    g2.setPaint(Color.WHITE);

    g2.draw(new Line2D.Double(50, 30, 230, 30));
    g2.draw(new Line2D.Double(50, 80, 230, 80));
    g2.draw(new Line2D.Double(50, 130, 230, 130));
*/
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

線の両端の形状を設定する

先端部分がどの部分なのか分かるようにそれぞれの直接の同じ位置に太さを変え先端の装飾がない直線を引いてみます。先ほどのサンプルでコメントとなっている部分を外して実行して下さい。

線の両端の形状を設定する

( Written by Tatsuo Ikura )