プログラマメモ2 - programmer no memo2

[java]縁のある線を描く 2009/03/17

Javaです。swingです。
グラフィックです。

図形(shape)に縁をつけて描画する方法は、BasicStrokeを使えばいいことはわかっていたのですが、
線に縁(輪郭?)をつけるのはどうしたらいいのかなぁと悩んでいました。

単純な線でしたら表示を変えたBasicStrokeを二度使えばいいのではと思ったわけです。
まず縁になる線を描画してその上に線を描画すれば、よいのではと。
幅の違うBasicStrokeをふたつ用意します。幅が大きいBasicStrokeが縁となります。



以下コード。

package basicstroke;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestMainb {

public static void main(String[] args) {

JFrame frame = new JFrame() {
{
setAlwaysOnTop(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setLocation(100, 100);
getContentPane().add(new Panel());
}
};
frame.setVisible(true);
}

static class Panel extends JPanel {

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
BasicStroke basicStroke = new BasicStroke(10.0f,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
BasicStroke dashStroke2 = new BasicStroke(7.0f);

// 縁
g2d.setColor(Color.GRAY);
g2d.setStroke(basicStroke);
g2d.drawLine(0, 0, 400, 400);

g2d.setColor(Color.LIGHT_GRAY);
g2d.setStroke(dashStroke2);
g2d.drawLine(0, 0, 400, 400);
}

}
}

: