2012-10-31 64 views
3

我是Java初学者图形,我一直试图在JFrame上绘制随机点,但不知道为什么当我编译时,框架上没有任何东西,对我来说逻辑很好+没有错误。有人可以帮助我什么是错在这里使用二维图形在Java中绘制随机点

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

回答

2

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

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

0

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

但是,除此之外,循环会根据随机数R计算X和Y值,但R永远不会重新计算为新的随机数(您在循环之前将其设置为一次,并且不会重置它)。因此,这将再次重复绘制相同的点再次1000次。

如果将循环中的随机数计算放在循环中,并且在随机点周围绘制一个半径为,哦,5-10像素的圆,它将更加明显。然后你应该在实现你的目标的道路上。

+0

感谢您的rpely,但我在每次迭代中使用%width或%height得到新的随机数,它甚至更独特,并且在进行下一次迭代之前,先绘制一个图,那就是使用PaintComponent – Sikander