破線の引き方
javaFXのCanvas上で破線を引きたいときは、Canvasから取ってきたGraphicsContextクラスのsetLineDashesメソッドで
破線の線を引く部分と引かない部分の長さを交互に与えればいい。
例えば1,3,2,1と設定した場合
(ーが引かれている場所、␣が引かれてない場所)
ー␣␣␣ーー␣ー␣␣␣ーー␣......
となる。
奇数を設定した場合その数列同士を2こつなぎ合わせたものを設定した扱いになる。
1,3,2と設定した場合
ー␣␣␣ーー␣ーーー␣␣ー␣␣␣ーー␣ーーー␣␣......
となる。
setLineDashOffsetを設定すると線の開始地点がその分だけずれる。
たとえば破線を4,2と設定した状態通常は
ーーーー␣␣ーーーー␣␣......
だが、オフセットを2にすると
ーー␣␣ーーーー␣␣ーーーー␣␣......
となる。
マイナスにすると逆側にずれる。
注意点
ここからが注意点だが、線の太さ(LineWidh)より小さい破線の空白部分は潰れて消えてしまう。
なぜかというと、線を描画するときにデフォルトでは
(■が太さ1で描かれた線、ロが太さ5で描かれた線)
ロロロロロロロロロロ
ロロロロロロロロロロ
ロロ■■■■■■■ロロ
ロロロロロロロロロロ
ロロロロロロロロロロ
のように太さの半分だけ線が延長される。これが破線の端でも起こるので、太さ5だと長さ5以下の空白部分は線に潰されて消えてしまう。
これを解決するには、setLineCapでBUTTを指定すればいい。
これを設定すると線を描画するときに
ロロロロロロ
ロロロロロロ
■■■■■■■
ロロロロロロ
ロロロロロロ
のように延長されずに描画されるので空白が潰されなくなる。
setLineCapで指定できる属性とその内容はStrokeLineCapのjavadocの図がとてもわかりやすい。
以上。