【Java】図形等の線幅や線の形を変更する
本稿は図形等の線幅を変更したり破線に変更したりする方法を紹介します。
線幅の変更
BasicStrokeクラスを利用することで実現できます。
BasicStrokeクラスのコンストラクタに線幅の設定をできます。
設定にはGraphics2DクラスにsetStrokeメソッドで設定できます。
import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class Test{ public static void main(String[] args) { GameWindow gw = new GameWindow("テストウィンドウ",400,300); gw.add(new DrawCanvas()); gw.setVisible(true); } } class GameWindow extends JFrame{ public GameWindow(String title, int width, int height) { super(title); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(width,height); setLocationRelativeTo(null); setResizable(false); } } class DrawCanvas extends JPanel{ public void paintComponent(Graphics g) { super.paintComponent(g); g.drawRect(100, 100, 50, 50); //線幅の変更 Graphics2D g2 = (Graphics2D)g; BasicStroke bs = new BasicStroke(5); g2.setStroke(bs); //変更した線幅で描画 g.drawRect(250, 100, 50, 50); } }
実行結果
左側は普通に描画し、右側は線幅を変更しています。
BasicStrokeのコンストラクタに線幅の変更値を設定しており、大きい値を設定するほど太い線が描画できます。
破線や角の描画方法を指定する
線の設定をもっと細かくしたい場合はBasicStrokeのコンストラクタの長い引数を指定します。
引数はnew BasicStroke(線幅,両端の形,線の接合部の形,接合トリミングの制限値,破線パターン配列,破線パターン開始位置)です。
DrawCanvasの線のスタイルを変更して描画したサンプルです。
class DrawCanvas extends JPanel{ public void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(100, 100, 300, 100); Graphics2D g2 = (Graphics2D)g; //両端を丸く BasicStroke bs1 = new BasicStroke(20, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); g2.setStroke(bs1); g.drawLine(100, 150, 300, 150); //破線で表示 BasicStroke bs2 = new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 1.0f, new float[] {6}, 0); g2.setStroke(bs2); g.drawLine(100, 200, 300, 200); } }
実行結果
ディスカッション
コメント一覧
フラクタル図形を描きたいのですが、どうすればいいですか?
もう自己解決したかもしれませんが、フラクタル図形を描く場合はアルゴリズムを考えて複数回の描画メソッドをコールする方法が一般的かと思います。
この辺の記事を参考に勉強してみてはいかがでしょうか?
・https://codezine.jp/article/detail/73
・https://qiita.com/kiuyas/items/dee169b7fea69519a18d
ついでに私もちょっと勉強して試したことを記事にしてみました。少しでも参考になれば幸いです。
・https://nompor.com/2019/05/14/post-5243/