首页 > 解决方案 > 随机圆形打印机 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)某处添加以打印出来,但我不确定如何。

标签: javaloopsgraphics

解决方案


问题出在这一行:

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);
     }

请注意,我在循环内移动了随机数生成。这并不能保证圆适合框架,但您可以稍后修改。


推荐阅读