带有图形的循环 - 生成图形时的错误



我试图让我的代码绘制 10 个矩形,每个矩形都有一个随机的位置和大小。

问题是,由于某种原因,它只绘制一个矩形,而从不绘制其他 9 个矩形。

我正在使用Math.random.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Punto1
extends JPanel {
public static void main(String[] args) {
System.out.println("Estoy en el main");
JFrame frame = new JFrame("Soy una ventana :D");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1280, 720);
frame.setVisible(true);
frame.setLocation(400, 200);
frame.setLocationRelativeTo(null);
frame.add(new Punto1());
}
public Punto1() {
}
public void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
/*if(x1 != 0 && y1 != 0 && x2 != 0 && y2 !=0){
g.drawLine(x1,y1,x2,y2);
*/
rectangulo(g);
}
public void rectangulo(Graphics g) {
for (int i = 0; i < 10; i++) {
int x = (int) Math.random() * 1120 + 75;
int y = (int) Math.random() * 680 + 75;
int width = (int) Math.random() * 960 + 50;
int height = (int) Math.random() * 960 + 50;
g.setColor(Color.BLUE);
g.drawRect(x, y, width, height);
}
}
}

(int)Math.random()将值截断为int,好吧,但是,random返回一个介于01之间的值,这意味着,任何小于1的值都将是,00 x 1120075,这是75,所以你的代码在同一位置绘制 10 个矩形

两个可能的解决方案:

一。。。

执行计算后将计算结果强制转换为int

int x = (int)(Math.random() * 1120 + 75)

这将确保根据double基值进行计算,并在计算结果后截断为int

利用图形 2D API 并使用支持双精度值的Rectangle2D...

double x = Math.random() * 1120 + 75;
double y = Math.random() * 680 + 75;
double width = Math.random() * 960 + 50;
double height = Math.random() * 960 + 50;
Rectangle2D rect = new Rectangle2D.Double(x, y, width, height);
((Graphics2D)g).draw(rect);

旁注...

此外,除非您有特定原因,否则您应该最后打电话setVisible- 这将导致更少的问题

JFrame frame = new JFrame("Soy una ventana :D"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
frame.setSize(1280,720);
frame.add(new Punto1());
frame.setLocationRelativeTo(null);
frame.setVisible(true);

最后(不,真的;))

由于窗口在各种操作系统中的工作方式,面板不太可能与窗口的大小相同,事实上,在大多数情况下,它更小。

在这种情况下,您应该避免依赖幻数并使用已知值

double x = Math.random() * getWidth() + 75;
double y = Math.random() * getHeight() + 75;
double width = Math.random() * (getWidth() / 2.0) + 50;
double height = Math.random() * (getHeight() / 2.0) + 50;
Rectangle2D rect = new Rectangle2D.Double(x, y, width, height);
((Graphics2D)g).draw(rect);

相关内容

  • 没有找到相关文章

最新更新