java - 随机圆形打印机 Java:图形不打印
问题描述
我试图创建一个在 500 x 500 帧中打印 n 个随机圆圈的代码,但它不起作用。
有人能告诉我为什么这段代码没有运行吗?
当我运行这段代码时,它可以让我输入我想要的随机圆圈的数量,但框架总是看起来是空的——没有画出圆圈。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.util.Scanner;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class RandomCircles extends JComponent
{
private int n;
public RandomCircles(int N)
{
n = N;
}
public void PaintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
double x = Math.random() * 500;
double y = Math.random() * 500;
double diameter = Math.random() * 500;
// Making sure the circle stays within the frame
for (int i = 0; i < n; i++)
{
while(x + diameter <= 500 || y + diameter <= 500)
{
Ellipse2D.Double circle
= new Ellipse2D.Double(x, y, diameter, diameter);
g2.draw(circle);
}
}
}
public static void main(String[]args)
{
Scanner in = new Scanner(System.in);
System.out.println("Enter number of circles here: ");
int n = in.nextInt();
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setTitle("Random Circles");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
RandomCircles circle = new RandomCircles(n);
frame.add(circle);
// Add PaintComponent method somewhere here?
frame.setVisible(true);
}
}
我有一种感觉,我需要在public void PaintComponent(Graphics g)
某处添加以打印出来,但我不确定如何。
解决方案
问题出在这一行:
public void PaintComponent(Graphics g)
您正在尝试覆盖该paintComponent(Graphics)
方法。您需要注意正确获取名称和参数。请注意,您使用大写 P 拼写了您的方法。
建议您在@Override
应该覆盖超类方法的方法上添加注释。这样,如果您的签名错误,您就会收到通知。
所以你的方法应该是这样的:
@Override
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
...
}
==评论后编辑==
while 循环也引起了问题。尝试这样做。
for (int i = 0; i < n; i++)
{
double x = Math.random() * 500;
double y = Math.random() * 500;
double diameter = Math.random() * 500;
Ellipse2D.Double circle
= new Ellipse2D.Double(x, y, diameter, diameter);
g2.draw(circle);
}
请注意,我在循环内移动了随机数生成。这并不能保证圆适合框架,但您可以稍后修改。
推荐阅读
- ios - 如何在 iOS 中获取谷歌地图的快照
- c++ - 如何使用 std::istreambuf_iterator 初始化字符串
- python - 通过熊猫数据框重命名组中的计数列
- spring - 无法使用生成的部署和服务描述符运行 pod 和服务
- html - HTML div 不留在 jumbotron 内
- sql - 数据库未使用按钮单击事件上的文本框值更新
- flutter-web - Flutter Web:Widget 内的自定义 DatePicker
- mysql - 如何将 docker 容器与主机的 localhost mysql 数据库连接?
- sql - SQL - 查找购买了所有产品的客户
- distributed-computing - Does sidecar topology has to be one to one?