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

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

ただいまの
回答率

87.77%

描画した展開図に色を反映させたい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 467

score 12

単刀直入に言います。
Swingで三角錐の展開図を表示はできているのですが、表示した三角形の中に数字("1","2","3","4")で色を区別することはできるのでしょうか?
数字としては、("1→赤色","2→青色","3→緑色","4→黄色")と反映させたいです。

わかる方からの返答お待ちしています。

ソースは以下になります。

import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Graphics;

public class takakkei_1 extends JFrame{



    public static void main(String[] args) {
        takakkei_1 frame = new takakkei_1();
        frame.setVisible(true);
        frame.setBounds(200, 200, 800, 600);

    }

    public void paint(Graphics g){
        /*    小さい三角一個を(x:60,y:60)の大きさ*/

        /*    一面        */
        int x1[] = {425,395,455,425};
        int y1[] = {510,450,450,510};

        int x2[] = {365,395,425,365};
        int y2[] = {390,450,390,390};

        int x3[] = {395,425,455,395};
        int y3[] = {450,390,450,450};

        int x4[] = {425,455,485,425};
        int y4[] = {390,450,390,390};

        int x5[] = {335,365,395,335};
        int y5[] = {330,390,330,330};

        int x6[] = {365,395,425,365};
        int y6[] = {390,330,390,390};

        int x7[] = {395,425,455,395};
        int y7[] = {330,390,330,330};

        int x8[] = {425,455,485,425};
        int y8[] = {390,330,390,390};

        int x9[] = {455,485,515,455};
        int y9[] = {330,390,330,330};
        /*二面*/
        int x10[] = {335,365,395,335};
        int y10[] = {330,270,330,330};

        int x11[] = {365,395,425,365};
        int y11[] = {270,330,270,270};

        int x12[] = {395,425,455,395};
        int y12[] = {330,270,330,330};

        int x13[] = {425,455,485,425};
        int y13[] = {270,330,270,270};

        int x14[] = {455,485,515,455};
        int y14[] = {330,270,330,330};

        int x15[] = {365,395,425,365};
        int y15[] = {270,210,270,270};

        int x16[] = {395,425,455,395};
        int y16[] = {210,270,210,210};

        int x17[] = {425,455,485,425};
        int y17[] = {270,210,270,270};

        int x18[] = {395,425,455,395};
        int y18[] = {210,150,210,210};
        /*三面*/
        int x19[] = {515,485,545,515};
        int y19[] = {330,390,390,330};

        int x20[] = {485,515,545,485};
        int y20[] = {390,450,390,390};

        int x21[] = {455,485,515,455};
        int y21[] = {450,390,450,450};

        int x22[] = {455,485,515,455};
        int y22[] = {450,510,450,450};

        int x23[] = {425,455,485,425};
        int y23[] = {510,450,510,510};

        int x24[] = {515,545,575,515};
        int y24[] = {450,390,450,450};

        int x25[] = {515,545,575,515};
        int y25[] = {450,510,450,450};

        int x26[] = {485,515,545,485};
        int y26[] = {510,450,510,510};

        int x27[] = {545,575,605,545};
        int y27[] = {510,450,510,510};
        /*四面*/
        int x28[] = {395,365,425,395};
        int y28[] = {450,510,510,450};

        int x29[] = {335,365,395,335};
        int y29[] = {450,510,450,450};

        int x30[] = {335,365,395,335};
        int y30[] = {450,390,450,450};

        int x31[] = {305,335,365,305};
        int y31[] = {390,450,390,390};

        int x32[] = {305,335,365,305};
        int y32[] = {390,330,390,390};

        int x33[] = {275,305,335,275};
        int y33[] = {450,390,450,450};

        int x34[] = {275,305,335,275};
        int y34[] = {450,510,450,450};

        int x35[] = {305,335,365,305};
        int y35[] = {510,450,510,510};

        int x36[] = {245,275,305,245};
        int y36[] = {510,450,510,510};

        /*1面*/
        g.setColor(Color.RED);
        g.fillPolygon(x1, y1, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x2, y2, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x3, y3, 4);

        g.setColor(Color.YELLOW);
        g.fillPolygon(x4, y4, 4);

        g.setColor(Color.RED);
        g.fillPolygon(x5, y5, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x6, y6, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x7, y7, 4);

        g.setColor(Color.RED);
        g.fillPolygon(x8, y8, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x9, y9, 4);

        /*2面*/
        g.setColor(Color.YELLOW);
        g.fillPolygon(x10, y10, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x11, y11, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x12, y12, 4);

        g.setColor(Color.YELLOW);
        g.fillPolygon(x13, y13, 4);

        g.setColor(Color.RED);
        g.fillPolygon(x14, y14, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x15, y15, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x16, y16, 4);

        g.setColor(Color.RED);
        g.fillPolygon(x17, y17, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x18, y18, 4);

        /*3面*/
        g.setColor(Color.RED);
        g.fillPolygon(x19, y19, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x20, y20, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x21, y21, 4);

        g.setColor(Color.YELLOW);
        g.fillPolygon(x22, y22, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x23, y23, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x24, y24, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x25, y25, 4);

        g.setColor(Color.RED);
        g.fillPolygon(x26, y26, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x27, y27, 4);
        /*4面*/
        g.setColor(Color.BLUE);
        g.fillPolygon(x28, y28, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x29, y29, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x30, y30, 4);

        g.setColor(Color.YELLOW);
        g.fillPolygon(x31, y31, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x32, y32, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x33, y33, 4);

        g.setColor(Color.GREEN);
        g.fillPolygon(x34, y34, 4);

        g.setColor(Color.RED);
        g.fillPolygon(x35, y35, 4);

        g.setColor(Color.BLUE);
        g.fillPolygon(x36, y36, 4);
    }

    takakkei_1(){

    }
}

となっています。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • madoka9393

    2018/10/11 13:37

    ひとつ前の質問で解決したのでは…?

    キャンセル

  • yasu_abu7

    2018/10/11 13:48

    前回の質問では、三角錐の展開図を表示するところまでとしました。色の反映するところは、結果的にできていないため、今回の質問を立てました。

    キャンセル

  • madoka9393

    2018/10/11 13:49

    なるほど、解決済みとなっていたのでてっきり解決したものかと。

    キャンセル

  • yasu_abu7

    2018/10/11 13:49

    いえ、解決はしていません。

    キャンセル

回答 1

0

なかなかのスパゲティぶりですので、勝手に書き換えさせていただきました。
COLOR_INDEXESの中の数値を変更すればそれに対応した色で表示されます。
回答というよりいきなり答えだけをぶつける感じですが、分からないようなところはコメントしてください。簡単に説明します。

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

public class PolygonDrawer extends JFrame {

    private static final List<Polygon> POLYGONS = new ArrayList<>();
    private static final int TRIANGLE_WIDTH = 60;
    private static final int TRIANGLE_HEIGHT = 52;
    private static final int TRIANGLE_ROW_COUNT = 8;
    private static final int TRIANGLE_DELTA_X = 400;
    private static final int TRIANGLE_DELTA_Y = 100;

    private static final Color[] INDEXED_COLORS = {Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW};
    private static final int[] COLOR_INDEXES = {
                                 0,
                              0, 1, 2,
                           0, 1, 2, 3, 0,
                        0, 1, 2, 3, 0, 1, 2,
                     0, 1, 2, 3, 0, 1, 2, 3, 0,
                  0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2,
               0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0,
            0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2
    };

    static {
        for (int i = 0; i < TRIANGLE_ROW_COUNT; i++) {
            for (int j = 0; j < 2 * i + 1; j++) {
                int sign = (j % 2 * 2 - 1) * -1;
                int originX = TRIANGLE_DELTA_X + (j * TRIANGLE_WIDTH - i * TRIANGLE_WIDTH) / 2;
                int originY = TRIANGLE_DELTA_Y + i * TRIANGLE_HEIGHT;

                POLYGONS.add(new Polygon(
                        new int[]{
                                originX - TRIANGLE_WIDTH / 2,
                                originX,
                                originX + TRIANGLE_WIDTH / 2
                        },
                        new int[]{
                                originY + TRIANGLE_HEIGHT / 2 * sign,
                                originY + TRIANGLE_HEIGHT / -2 * sign,
                                originY + TRIANGLE_HEIGHT / 2 * sign,
                        },
                        3
                ));
            }
        }
    }

    @Override
    public void paint(Graphics graphics) {
        IntStream.range(0, POLYGONS.size())
                .forEach(i -> {
                    graphics.setColor(INDEXED_COLORS[COLOR_INDEXES[i]]);
                    graphics.fillPolygon(POLYGONS.get(i));
                });
    }

    public static void main(String[] args) {
        PolygonDrawer polygonDrawer = new PolygonDrawer();
        polygonDrawer.setVisible(true);
        polygonDrawer.setSize(800, 600);
        polygonDrawer.setLocationRelativeTo(null);
        polygonDrawer.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る