paintComponent(g)或paintComponent(g2)?

时间:2016-08-18 00:41:06

标签: java graphics paint

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

OR

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

如果我使用的是Graphics2D,哪个是正确的?我还会使用paintComponent(g)或将其传递给g2吗?

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

2 个答案:

答案 0 :(得分:4)

方法paintComponent接受Graphics作为参数,Graphics2DGraphics的子类。因此,将g传递给super.paintComponent相当于传递g2。但是,如果super.paintComponent被重载,那么会有所不同,因此一个版本接受Graphics而另一个版本接受Graphics2D(这不是这种情况)。

答案 1 :(得分:4)

Graphics是一个抽象类,因此无法实例化。鉴于Graphics在本机Java库中只有两个实现Graphics2DDebugGraphics,您可以假设g将是Graphics2D,这是第二种方法相当多余(但不是不正确)。 DebugGraphics很少用于手绘图形。

总而言之,您可以以任何一种方式传递它,因为它们是100%等效的。