No.3
- 回答日時:
汎用性/再利用性のある矢印線オブジェクトを作ってみました。
大急ぎで作ったのでアラがあると思いますが、参考になれば幸いです。-----------------------------------------------------
/* 片方だけ矢がある矢印線 */
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import static java.awt.RenderingHints.*;
public class OneSideArrow extends Path2D.Float{
enum Side{LEFT, RIGHT};
Point start;
Point end;
double length;
double slope; //radian
int angle; //degree
double theta; //radian
int barblen;
//起点,終点,矢羽根の角度,矢羽根の長さ
public OneSideArrow(Point s, Point e, int a, int b){
start = s;
end = e;
length = start.distance(end);
slope = getSlope(start, end);
angle = a;
theta = Math.toRadians(angle);
barblen = b;
moveTo(start);
append(new Line2D.Double(start, end), false);
attachBarb();
}
public void attachBarb(){
append(getBarb(Side.LEFT), false);
append(getBarb(Side.RIGHT), false);
}
private Line2D getBarb(Side s){
double slant = s == Side.LEFT ? slope + theta : slope - theta;
double tipx = end.x - barblen * Math.cos(slant);
double tipy = end.y - barblen * Math.sin(slant);
return new Line2D.Double(end.x, end.y, tipx, tipy);
}
public double getSlope(Point ps, Point pe){
double dy = pe.y - ps.y;
double dx = pe.x - ps.x;
return (Math.atan2(dy, dx));
}
public void moveTo(Point p){
moveTo((float)p.x, (float)p.y);
}
// このバージョンでは不使用
public void lineTo(Point p){
lineTo((float)p.x, (float)p.y);
}
/* テスト用のパネル */
static class DrawPanel extends JPanel{
Shape shape;
RenderingHints rh;
DrawPanel(Shape shp, int width, int height){
shape = shp;
setPreferredSize(new Dimension(width, height));
setBackground(Color.white);
rh = new RenderingHints(null);
rh.put(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
rh.put(KEY_STROKE_CONTROL, VALUE_STROKE_PURE);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHints(rh);
g2.setStroke(new BasicStroke(2.0f));
g2.setPaint(Color.red);
if (shape != null){
g2.draw(shape);
}
}
}
/* テスト */
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OneSideArrow arrow
= new OneSideArrow(new Point(15, 15), new Point(185, 175), 18, 13);
DrawPanel dp = new DrawPanel(arrow, 200, 200);
frame.getContentPane().add(dp, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
------------------------------------------------
No.2ベストアンサー
- 回答日時:
Javaの2Dグラフィクスを最初からちゃんと勉強しましょう。
出発点は:
http://java.sun.com/docs/books/tutorial/2d/TOC.h …
と
http://java.sun.com/products/java-media/2D/sampl …
矢印を描くコードの参考例は、ネット上にたくさんあります。ここではそのひとつを:
http://forum.java.sun.com/thread.jspa?forumID=20 …
すぐの回答、ありがとうございます。
わかりました。まだまだ不勉強だったんですね。
教えてくださってありがとうございます。
頑張ってみます☆
No.1
- 回答日時:
長い線を1本と、小さな線を2本描くのでOK?
それとも、矢の部分は図形?
どっちにしても、いちいちdrawLine()するのでなく、そのようなShapeオブジェクト、とくにPath2Dオブジェクトを定義して、角度などはオブジェクトをコンストラクトするときのパラメータにすればよいでしょう。
さっそくの回答ありがとうございます。
はい、長い線を1本と、小さい線を2本です。
すいません・・・。
>>Shapeオブジェクト、とくにPath2Dオブジェクト
とは、何のことかがわからないのですが・・・。
まだまだ、勉強不足で・・・。
教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) WORD2007で矢印が変わる 1 2022/10/02 09:02
- PowerPoint(パワーポイント) パワーポイント。2つの矢印のワイプ&消滅の順番に実施、これの繰り返し 2 2023/07/25 09:13
- 地球科学 中学生 理科 1 2022/11/19 21:48
- デスクトップパソコン パソコンの画面が固まった感じになり マウスの矢印を持って行って左クリックしても固まりに変化が起きない 2 2022/07/20 19:46
- Windows 10 フォルダ内の全ての画像を矢印キーでスライドできるようにしたい 1 2022/10/21 12:53
- Word(ワード) ワード。オブジェクトの一部分にグラデーションを塗るには 2 1 2022/10/04 16:25
- Chrome(クローム) PCから郵便IDでポインターが矢印のままログインできない 1 2022/03/25 16:44
- PowerPoint(パワーポイント) PowerPointで曲線矢印を描きたいです 1 2022/05/04 14:39
- 地図・道路 高速道路の80キロ速度標識の間の区間、走行可能速度は80キロ?100キロ? 1 2022/10/04 21:39
- CAD・DTP 「機能ブロック図」の描画用フリーソフトを教えてください 1 2022/09/23 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
intが負の時に投げる例外はあり...
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
DataSet(DataTable)の使い方
-
C#で判断文(三択)の省略形は...
-
JAVA EOFの検出 (条件文で「...
-
javaで電卓を作りたいのですが...
-
Stringの文字列をString[]配列...
-
初心者ですが、今javaで簡単な...
-
JUnit4のアノテーションについて
-
C++からC#のdllを参照する際、...
-
javaのエラーの意味がわかりま...
-
javaで次のような図の絵を描く...
-
byte[2] から int へ。
-
各店舗全て、リンゴは1個150円...
-
6桁の数字を重複なしでランダム...
-
二次元配列の初期化の方法。
-
C#で実行時にメソッドの返り値...
-
java 長さの異なる配列の代入
-
java streamでenum配列への変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
javaでカレンダー作成
-
Javaで電卓を作りたい
-
SwingでJtableのヘッダ行が表示...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
C#で実行時にメソッドの返り値...
-
(Swing)JTextFieldを半角のみ入...
-
c# デリゲート関連の命名について
-
Javaでポインタ的なことはでき...
-
複数のボタンを配置し、それぞ...
-
JUnit4のアノテーションについて
-
javaのエラーの意味がわかりま...
-
intが負の時に投げる例外はあり...
-
sin曲線とcos曲線を描くプログ...
-
C++からC#のdllを参照する際、...
-
Java 初心者 int型の取り扱い方
おすすめ情報