我有代码
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);
}
}
我试图让它做的是在屏幕上的随机位置绘制一堆随机颜色的矩形。但是,当我运行它时,我只得到一个灰色的盒子。我正在阅读这个问题Drawing multiple lines with Java Swing,我发现你应该有一个paintComponent,它会多次调用paint,我尝试调整我的代码,但它仍然不起作用。
答案 0 :(得分: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);
}
}