【问题标题】:Creating random Triangles in Java在 Java 中创建随机三角形
【发布时间】:2015-10-25 23:19:19
【问题描述】:

我需要创建一个程序来生成五个随机三角形,所有三角形都用随机颜色填充。随着窗口大小的调整,三角形也必须重新绘制。问题是三角形根本没有出现,我只是得到一个灰色框。我觉得我遗漏了一些明显的东西,例如缺少导入或错误位置的行,但我尝试多次调整代码均无济于事。我的 drawPolygon 数组都错了吗?我不知道 - 我真的需要一些帮助。

import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.util.Random;
import java.awt.Color;
import java.awt.Point;
import javax.swing.JPanel;
import javax.swing.JFrame;

 class RandomTriangles extends JPanel {
     public void paint(Graphics g) {
         super.paintComponent(g);
         Graphics2D g2d = (Graphics2D) g;
         float strokeThickness = 2.0f;

        BasicStroke stroke = new BasicStroke(strokeThickness,
                BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
        g2d.setStroke(stroke);

        Random randGen = new Random();
        int curHeight = this.getHeight();
        int curWidth = this.getWidth();

        int [] x = new int [3];
        int [] y = new int [3];

        for(int i = 0; i < 3; i++) {
            x[i] = randGen(curWidth);
            y[i] = randGen(curHeight);
        }

        for(int t = 0; t < 5; t++){
            g2d.fillPolygon(x, y, 3);
            g2d.setColor(new Color(randGen.nextInt(256),      randGen.nextInt(256), randGen.nextInt(256)));
        }

    }

    private int randGen(int curWidth) {
        // TODO Auto-generated method stub
        return 0;
    }
}

public class Triangles {
     public static void main(String[] args) {
         new Triangles();
    }

        Triangles() {
        JFrame frame = new JFrame("Triangles");

        frame.add(new RandomTriangles());

        frame.setSize(500, 500);
        frame.setVisible(true);
    }

}

【问题讨论】:

  • 所以有错误吗?输出是否与预期输出不同?究竟是什么问题?并且您的 randGen() 方法不会随机生成任何东西,它只是每次都返回 0
  • 是时候调试你的程序了。您是否使用调试器逐步完成此操作,或者至少添加了一堆打印语句,以确定程序的执行何时与您的期望不同?发生这种情况时,每个变量的值是多少?为什么它们如此有价值?

标签: java arrays graphics colors shapes


【解决方案1】:

首先,您创建一个 Random 对象,这很好!

    Random randGen = new Random();

但你从不使用它。相反,你调用 randGen,一个你定义的函数

    for(int i = 0; i < 3; i++) {
        x[i] = randGen(curWidth);
        y[i] = randGen(curHeight);
    }

但是 randGen 被定义为总是返回 0!您应该删除该方法,并在循环调用中

    for(int i = 0; i < 3; i++) {
        x[i] = randGen.nextInt(curWidth);
        y[i] = randGen.nextInt(curHeight);
    }

【讨论】:

  • 您还应该提到for(int i = 0; i &lt; 3; i++) {...} 应该是for (int t = 0; t &lt; 5; t++) {..} 的一部分。
  • 我现在可以吻你 ControlAltDel 和你 Pshemo。你们俩都救了我的培根,让我开心。谢谢! :D
  • @Adam,您不应该在 paintComponent() 方法中生成随机三角形。每当您调整框架大小时,paintComponent() 方法将再次被调用,并且您的三角形将随机重新生成,作为用户,我会觉得这很烦人。相反,您应该在创建类时生成三角形。此外,您应该覆盖paintComponent(...) NOT paint(...)。
  • 您还应该创建一个类来包含三角形和颜色,以便它们可以正确地重新绘制。查看Custom Painting Approaches 中的DrawOnComponent.java 示例中的CororedRectangle 类,了解此方法的示例。
猜你喜欢
  • 2020-07-01
  • 2014-07-05
  • 2013-05-31
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多