質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1626閲覧

Javaのことですが

Kazut1

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2019/05/09 04:21

編集2019/05/09 04:26

eclips(java)でプログラムを作っているのですが赤丸(c3)をマウスで移動できるようにした上で、タップする度に色をランダムで変えられるようにしたいのですが、移動までは出来ましたが色を変えることが出来ません。どう書き直せばいいか教えてください。

import java.awt.*;

import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.*;

public class s_1 extends JPanel {

private static final boolean fales = false; double a = 100*Math.cos((Math.PI)*2*1/3)+400; //変数の更新 double b = 100*Math.sin((Math.PI)*2*1/3)+200; //変数の更新 double c = 100*Math.cos((Math.PI)*2*2/3)+400; //変数の更新 double d = 100*Math.sin((Math.PI)*2*2/3)+200; //変数の更新 double e = 100*Math.cos((Math.PI)*2*3/3)+400; //変数の更新 double f = 100*Math.sin((Math.PI)*2*3/3)+200; //変数の更新 Circle c1 = new Circle(Color.MAGENTA, 100, 50, 40); Circle c2 = new Circle(Color.BLUE, 100, 50, 30); Rect r1 = new Rect(Color.YELLOW, 200, 100, 50, 50); // 正方形の生成 Triangle t1 = new Triangle(Color.BLACK, (int)a, (int)b, (int)c, (int)d, (int)e, (int)f); // 正三角形の生成 Rect r2 = new Rect(Color.GREEN, 600,300, 60, 60); // 正方形の生成 Circle c3 = new Circle(Color.RED, 800, 400, 50); public s_1() { setOpaque(fales); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { c3.moveTo(evt.getX(), evt.getY()); repaint(); } }); } public void paintComponent(Graphics g) { c1.draw(g); c2.draw(g); r1.draw(g); // 正方形の描画 t1.draw(g); // 正三角形の描画 r2.draw(g); // 正方形の描画 c3.draw(g); } public static void main(String[] args) { JFrame app = new JFrame(); app.add(new s_1()); app.setSize(1000, 700); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setVisible(true); } static class Circle { Color col; int xpos, ypos, rad; public Circle(Color c, int x, int y, int r) { col = c; xpos = x; ypos = y; rad = r; } public void moveTo(int x, int y) { xpos = x; ypos = y; } public void draw(Graphics g) { g.setColor(col); g.fillOval(xpos - rad, ypos - rad, rad * 2, rad * 2); } } /* 正方形クラスの定義 */ static class Rect { Color col; int xpos, ypos, width, height; public Rect(Color c, int x, int y, int w, int h) { col = c; xpos = x; ypos = y; width = w; height = h; } public void draw(Graphics g) { g.setColor(col); g.fillRect(xpos - width / 2, ypos - height / 2, width, height); } } /* 正三角形クラスの定義 */ static class Triangle { Color col; int[] xs, ys; public Triangle(Color c, int x0, int y0, int x1, int y1, int x2, int y2) { col = c; xs = new int[] { x0, x1, x2 }; ys = new int[] { y0, y1, y2 }; } public void draw(Graphics g) { g.setColor(col); g.fillPolygon(xs, ys, 3); } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/05/09 04:26

質問タグにある「JavaScript」は無関係な言語なので外してください。
m.ts10806

2019/05/09 04:29

Javaであることはタグで分かるのでタイトルに書く必要はないです。要件(起きている問題・実現したいこと)を記載してください。 コードはマークダウンの機能を利用してご提示ください。 https://teratail.com/help#about-markdown
guest

回答1

0

マウスクリックを検出するには以下のクラスとメソッドを使います。

  • MouseAdapter.mouseClicked()
  • Jpanelにイベントリスナーを登録する。addMouseListener()

C3の上でマウスがクリックされたことを知るには次のようにします。

  • M(x,y): マウスの位置(上記のメソッドMouseAdapter.mouseClicked()の引数Eventより取得)
  • C3(x,y): 円の中心の位置(Circleのインスタンス変数 xpos, ypos)
  • 距離(M,C3)が C3 の半径 rad 以内に収まるか。
  • Circle.isIn(x,y):booleanCircle.contains(x,y):boolean

色を変えるには乱数を使います。

  • Math.random()で乱数(0<=r<1)を得て、整数にする。(0x1000000をかける)
  • java.math.Rnadomjava.util.RnadomのnextInt()を使って、整数を得る。
  • 上のいずれかの方法で得た整数を Color のコンストラクタの引数に与える。
  • Circle.changeColor():void

repaintする。

  • repaint()して間接的にc3.draw(g)を呼びます。

図形が点(x,y)を含むかの判定 (2018-05-11)

ある図形の上でマウスがクリックされたかを判定するには、java.awt.Shape.contains(x,y)を使います。Shapeを継承するクラスは以下のとおり。

  • 楕円(円) - java.awt.geom.Ellipse2D
  • 四角形(正方形) - java.awt.geom.Rectangle2D
  • 多角形(三角形) - java.awt.Polygon

Circle,Rect,Triangleクラスでそれぞれインスタンスを保持しておきます。移動したら作り直します。

Java

1Shape shape = new Ellipse2D.Double(xpos - rad, ypos - rad, rad * 2, rad * 2);

正方形

Java

1Shape shape = new Rectangle2D.Double(xpos - width / 2, ypos - height / 2, width, height);

三角形

Java

1Shape shape = new Polygon(xs, ys, 3);

点(x,y)が図形に含まれるかの判定。

Java

1shape.contains(x,y);

投稿2019/05/09 06:21

編集2019/05/11 06:42
xebme

総合スコア1081

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問