public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.fillRect(0,0,25,25);
}或
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g2);
g2.fillRect(0,0,25,25);
}如果我使用的是Graphics2D,哪一项是正确的?我会继续使用paintComponent(g),还是将其传递给g2?
抱歉,如果这是一个愚蠢的问题,我会使用第二个问题,但我只是想知道哪种方法是正确的,以防我做错了什么。
发布于 2016-08-18 08:50:15
Graphics是一个抽象类,因此不能实例化。鉴于Graphics在原生Java库中只有两个实现,即Graphics2D和DebugGraphics,您可以假设g将是Graphics2D,这使得第二种方法相当冗余(但不是错误的)。DebugGraphics很少用来手工绘制图形。
总而言之,你可以用任何一种方式传递它,因为它们是100%等价的。
发布于 2016-08-18 08:45:28
方法paintComponent接受Graphics作为参数,而Graphics2D是Graphics的子类。因此,将g传递给super.paintComponent等同于传递g2。但是,如果super.paintComponent被重载,使得一个版本接受Graphics,而另一个版本接受Graphics2D (这里不是这种情况),情况就不同了。
https://stackoverflow.com/questions/39008276
复制相似问题