【Java】楕円を描画する。【java.awt.geom】


スクリーンショット 2014-07-25 5.21.29

現在授業の最終課題でペイントツールのような物を作成しております。どうも!

その際にjava.awt.geomを用いているのですが、楕円の描画に苦労したので楕円の描画で僕がてこずったところを紹介します。


まず何が僕をこんなに混乱させたか。
先生が配布したリファレンスです。描画ツールの中に「Line, Rect, Oval」等の図形の名称がズラーとリストされていたのですが、これがいけなかった…。


Line2D currentLine;
Rectangle2D currentRect;
Point2D startp;
Ellipse2D currentOval;

こんな感じで書くべきところをずっと

Line2D currentLine;
Rectangle2D currentRect;
Point2D startp;
Oval2D currentOval;

と書いてしまっていました。笑
javaではovalではなくellipseです。


後は普通にこんな感じでかけました。

	void createOval(int mx, int my) {
		currentOval = new Ellipse2D.Double(mx, my , 0, 0);
		startp = new Point2D.Double(mx, my);
	}
	void redrawOval(int mx, int my) {
		double sx=(int)startp.getX();
		double sy=(int)startp.getY();
		double x = Math.min(sx, mx);
		double y = Math.min(sy, my);
		double w = Math.abs(sx - mx);
		double h = Math.abs(sy - my);
		currentOval = new Ellipse2D.Double(x, y, w, h);
	}
	void resisterOval(int mx, int my) {
		double sx=(int)startp.getX();
		double sy=(int)startp.getY();
		double x = Math.min(sx, mx);
		double y = Math.min(sy, my);
		double w = Math.abs(sx - mx);
		double h = Math.abs(sy - my);
		objects.add(new DrawOval(x, y, w, h));
		currentOval = null;
		startp = null;
	}

どっち方向に楕円を伸ばして行っても表示されるようにしています。
ちなみにDrawOvalはこんなかんじ。

public class DrawOval {
	double width;
	double height;
	
public DrawOval(double x, double y, double w, double h) {
		median = new Point2D.Double(x, y);
		width = w;
		height = h;
	}

public void paint(Graphics g) {
	Graphics2D g2 = (Graphics2D)g;
	Area ovalarea = new Area(new Ellipse2D.Double(median.getX(), median.getY(), width, height));
	g2.draw(ovalarea);
	}
}

実にてこずったのが「なんでOval2Dがないのか?」ってところでした。
それに30分もかけていたと思うとばかばかしいですね。笑

このサイトを見た際にハッとしました。笑


皆さん!
楕円はOvalではなくEllipseなので気をつけてください!!!


最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。


コメントを残す