public class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g){
Graphics2D gd2 = (Graphics2D) g;
GradientPaint gradient = new GradientPaint(70,70,Color.blue,150,150,Color.red);
}
}
为什么这是有效的,但不是这样的:
public class MyDrawPanel extends JPanel {
public void paintComponent(Graphics2D g){
GradientPaint gradient = new GradientPaint(70,70,Color.blue,150,150,Color.red);
g.setPaint(gradient);
g.fillOval(70,70,100,100);
}
}
第一个渲染,但是第二个渲染除框架以外的任何图形。我注意到paintComponent()需要一个Graphics对象,但是如果Graphics2D是Graphics对象的子类,为什么不能调用Graphics的子类呢?
关于这是为什么,我是否有一些概念不明白?
最佳答案
基本上,当您覆盖某个方法时,您可以具有相同或更少的特定性。
考虑一下:
JPanel p = new MyPanel();
p.paintComponent(someGraphicsInstance);
对
JPanel
的引用应该能够接受Graphics引用作为paintComponent
方法的参数。但是,您的方法违反了该要求,因为它将不接受Graphics
实例,而仅接受Graphics2D
。有关更多信息,请参见https://stackoverflow.com/a/9950538/567864
关于java - 为什么paintComponent无法接受Graphics2D对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10135982/