获取图形2D


public void paint(Graphics g){
    Graphics2D g2 = (Graphics2D)g; //
    double r = 100; //the radius of the circle
    //draw the circle
    Ellipse2D.Double circle = new Ellipse2D.Double(0, 0, 2 * r, 2 * r);
    g2.draw(circle);

这是我程序中一个类的一部分,我的问题在于

Graphics2D g2 = (Graphics2D)g;

为什么你必须在(Graphics2D)之后加上"g",以及括号中的"Graphics2D"到底是什么意思,我是从一本书中学到的,而这些都没有完全解释过。

您正在将Graphics2D转换为Graphics上下文g。有关强制转换的更多信息,请参阅"转换"部分的"继承"。

这最终的作用是分配你使用可用的Graphics2D方法和传递给paintComponent方法的Graphics上下文。除了选角之外,您只能使用Graphics类的方法

Graphics2DGraphics 的一个子类,因此通过使用Graphics2D您可以获得所有Graphics方法,同时利用Graphics2D类中的方法。


旁注

  • 你不应该被覆盖paint .另外,如果你是,你不应该像JApplet这样的顶级容器上绘画。

  • 而是在JPanelJComponent上绘画并覆盖paintComponent而不是paint并调用super.paintComponent。然后只需将JPanel添加到父容器即可。

    public DrawPanel extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
        }
    }
    

自定义绘画图形2D中查看更多信息

是的,您必须包含g

当您输入绘制方法时,您有一个类型为 Graphics 的对象g

然后,您将Graphics对象进行类型转换,g为一种Graphics2D类型,该类型是扩展Graphics的类型。

您必须包含g,以便进行类型转换。如果您没有在此处包含对象,则会收到编译错误,因为该语句不完整。

gGraphics2D对象进行类型转换的原因是,您告诉编译器"此图形对象实际上是一个 Graphics2D 对象",这样您就可以执行Graphics2D对象具有而Graphics对象没有的功能。

这个 stackoverflow 答案很好地解释了 Java 中的转换变量,如果你对此有更多疑问。这个堆栈溢出答案解释了为什么从Graphics转换为Graphics2D是安全的

相关内容

  • 没有找到相关文章

最新更新