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/

10-10 14:45