2016-08-18 54 views
4
public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.fillRect(0,0,25,25); 
} 

ORpaintComponent(g)或paintComponent(g2)?

public void paintComponent(Graphics g){ 
    Graphics2D g2 = (Graphics2D) g; 
    super.paintComponent(g2); 
    g2.fillRect(0,0,25,25); 
} 

,如果我用的Graphics2D这将是正确的?我仍然paintComponent(g)或将其传递给g2而不是?

对不起,如果这是一个愚蠢的问题,我会使用第二个问题,但我只是想知道哪些是正确的方法,以防万一我做错了什么。

+2

如果'g'实际上是一个'Graphics2D'(并且我没有看到AWT回来),那么这些**实际上**是相同的。 –

+0

它没有任何区别。这是同一个对象。 – EJP

回答

4

Graphics是一个抽象类,因此无法实例化。由于Graphics在本地Java库和DebugGraphics中只有两个实现,因此可以假设g将为Graphics2D,这使得第二种方法非常冗余(但不是不正确)。手工绘制图形很少使用DebugGraphics

总而言之,你可以用任何方式传递它,因为它们是100%等价的。

4

方法paintComponent接受Graphics作为参数,而Graphics2DGraphics的子类。所以,通过gsuper.paintComponent就等于通过g2。但是,如果super.paintComponent超负荷使得一个版本接受Graphics而另一个版本接受Graphics2D(这不是这里的情况),那将是不同的。