使用Swing在Java中绘制多个矩形



我有代码

import java.awt.*;
import javax.swing.*;
public class MondrianPanel extends JPanel
{
    public MondrianPanel()
    {
        setPreferredSize(new Dimension(200, 600));
    }
    public void paintComponent(Graphics g) {
        for(int i = 0; i < 20; i++) {
            paint(g);
        }
    }
    public void paint(Graphics g)
    {
        Color c = new Color((int)Math.random()*255, (int)Math.random()*255, (int)Math.random()*255);
        g.setColor(c);
        g.fillRect((int)Math.random()*200, (int)Math.random()*600, (int)Math.random()*40, (int)Math.random()*40);
    }
}

我想让它做的是在屏幕上的随机位置画一堆随机颜色的矩形。然而,当我运行它时,我只得到一个灰框。我正在阅读这个问题,用Java Swing绘制多行,我看到你应该有一个单一的paintComponent调用paint一堆时间,我试着适应我的代码,但它仍然不起作用。

这里最大的问题是(int) Math.random() * something总是0。这是因为先执行强制转换,然后是0,然后乘以一些东西仍然是0

应该是这样的:(int) (Math.random() * something) .

那么,您应该将paint(Graphics g)重命名为draw(Graphics g),否则您将以错误的方式覆盖paint

下面的代码可以按照您的需要工作:

public class TestPanel extends JPanel {
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < 20; i++) {
            draw(g);
        }
    }
    public void draw(Graphics g) {
        Color c = new Color((int) (Math.random() * 255), (int) (Math.random() * 255), (int) (Math.random() * 255));
        g.setColor(c);
        g.fillRect((int) (Math.random() * 400), (int) (Math.random() * 300), (int) (Math.random() * 40), (int) (Math.random() * 40));
    }
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.getContentPane().add(new TestPanel(), BorderLayout.CENTER);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400, 300);
        f.setVisible(true);
    }
}

相关内容

  • 没有找到相关文章

最新更新