3

我是 java Graphics 的初学者,我一直在尝试在 JFrame 上绘制随机点,但不知道为什么当我编译时 Frame 上什么都没有,对我来说逻辑很好+没有错误。有人可以帮我这里有什么问题吗

public class parent extends JPanel {    

    public void PaintComponent (Graphics g)     
    {
        super.paintComponent(g);
        Graphics2D g2d  = (Graphics2D) g;
        g2d.setColor(Color.blue);
        Dimension size = getSize();
        Insets  insets= getInsets();
        int w =  size.width - insets.left - insets.right;
        int h =  size.height - insets.top - insets.bottom;
        Random r = new Random();

        for (int i=0; i<1000; i++) {
           int x = Math.abs(r.nextInt()) % w;
           int y = Math.abs(r.nextInt()) % h;
           g2d.drawLine(x, y, x, y);
        }
    }


    public static void main(String[] args) 
    {
        JFrame frame = new JFrame("Points");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new parent());
        frame.setSize(250, 200);
        frame.setVisible(true);
     }
} 
4

2 回答 2

2

是这样PaintComponent还是应该这样paintComponent?我想我知道 Java 开发人员会选择哪一个。

请注意,这是一个@Override在注释中会在 Eclipse 中捕获的完美错误。

于 2012-10-31T19:54:08.573 回答
0

从您的代码中,您正在使用 DrawLine 从 (x, y) 绘制到 (x, y)。这将是一个像素。你已经设置了蓝色。因此,无论颜色如何,它都不会很明显。

但除此之外,您的循环根据随机数 R 计算 X 和 Y 值,但 R 永远不会重新计算为新的随机数(您在循环之前设置一次,并且永远不会重置它)。因此,它将一遍又一遍地重新绘制同一点 1,000 次。

如果你把随机数计算放在循环中,让它在你的随机点周围画一个半径为 5-10 像素的圆,它会更明显。然后你应该在实现你的目标的路上。

于 2012-10-31T20:01:01.140 回答