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

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

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

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

Q&A

解決済

1回答

2061閲覧

JAVA:ダブルクラスによる 二重円の描画のドラグするたびによる色の変化ができない。

ZhenZeZhang

総合スコア33

Java

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

0グッド

0クリップ

投稿2019/05/17 11:04

円を作成するのクラスにもう一つのそれらを重ねるクラスを複数使うことで二重円を作るプログラムです。だが、ドラグをすると色はなぜか黒になって自分が望んだ色の変化がしないです。以下がすべてのプログラムです。

import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.imageio.*; import javax.swing.*; public class R5A_3 extends JPanel { ArrayList<Fig> fif = new ArrayList<Fig>(); Fig ser = null; private Fig pi(int x, int y) { Fig fi = null; for (Fig f : fif) { if (f.ht(x, y)) { fi = f; } } return fi; } public R5A_3() { setOpaque(false); fif.add(new DoubleCircle(300, 300, 200, 255, 0, 0)); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { ser = pi(e.getX(), e.getY()); // クリックされた図形を選択 } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { if (ser == null) { // クリックされた図形がなければ何もしない return; } ser.moto(evt.getX(), evt.getY()); // クリックされた図形を移動させる repaint(); } }); } public void paintComponent(Graphics gg) { for (Fig f : fif) { f.dro(gg); } } public static void main(String[] arg) { JFrame f = new JFrame(); f.add(new R5A_3()); f.setSize(640, 640); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } public class Circle implements Fig { Color c; int px, py, ran; int ca, r, g, b; public Circle(int x, int y, int r, int q, int w, int e) { Color ci = (new Color(q, w, e)); c = ci; px = x; py = y; ran = r; } public void chc() { ca = r; r = g; g = b; b = ca; Color c1 = new Color(r, g, b); c = c1; } public void dro(Graphics G) { G.setColor(c); G.fillOval(px - ran / 2, py - ran / 2, ran, ran); } public boolean ht(int x, int y) { boolean a = (px - x) * (px - x) + (py - y) * (py - y) <= ran * ran; if (a == true) chc(); return a; } public void moto(int x, int y) { px = x; py = y; } } public class DoubleCircle implements Fig { Color co; Circle c0; Circle c1; int r, g, b; public DoubleCircle(int x, int y, int ra, int q, int w, int e) { Color c = new Color(q, w, e); co = c; r = q; g = w; b = e; c0 = new Circle(x, y, ra, r, g, b); c1 = new Circle(x, y, ra / 2, r, g, b); } public void dro(Graphics go) { c0.dro(go); c1.dro(go); } public boolean ht(int x, int y) { System.out.println(r + " " + g + " " + b); c0.ht(x, y); c1.ht(x, y); boolean a = c0.ht(x, y); return a; } public void moto(int a, int b) { c0.moto(a, b); c1.moto(a, b); } } interface Fig { public void dro(Graphics g); public boolean ht(int x, int y); public void moto(int x, int y); }

実際の画像です。左が実行後直後。右がドラグを行った直後です。

問題点&解決をしたい内容:御覧のように二重円といっても異なった二つの円が表れていないことが一つの問題です。次に色がクリック&ドラッグするたびび偏食をする(R=>G=>B=>R)ことが一度黒になるとそこで変色がおしまいになることです。

やってみた、試したこと。:まずクラスの中にchc()の自作変色関数があります、それをCircleクラスとDoublecircleクラスの中で入れ替えて見た。何も起きなかった。

もしどなたかわかる方がいっらいらっしゃればぜひ教えていただくと助かります。ありがとうございます。

自分はC言語の入門の知識を持ってます。
もし質問の内容について不足がありましたら是非コメントをください。
ありがとうございます。

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

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

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

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

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

guest

回答1

0

自己解決

public Circle(int x, int y, int r, int q, int w, int e) {
Color ci = (new Color(q, w, e));
c = ci;
px = x;
py = y;
ran = r;
}

public Cir(int x, int y, int ra, int q, int w, int e) { Color c = new Color(q, w, e); co = c; px = x; py = y; ran = ra; r = q; g = w; b = e; }

にすればできました。
それはRGBに元から何もないより0を代入することと同じだからでした。

投稿2019/05/17 11:12

ZhenZeZhang

総合スコア33

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問