2

私はコードを持っています

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で複数の線を描くと、paintを何度も呼び出す単一のpaintComponentが必要であることがわかり、コードをこれに適合させようとしましたが、それでも機能しません。

4

1 に答える 1

4

ここでの最大の問題は、(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);
    }
}
于 2013-01-15T18:06:49.990 に答える