获取 Graphics2D?

问题描述:

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);

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

This is part of a class within my program, my question lies in the

Graphics2D g2 = (Graphics2D)g;

为什么必须在 (Graphics2D) 后面加上g",括号内的Graphics2D"究竟是什么意思,我是从一本书中学到的,但这些都没有得到充分解释.

Why must you include the "g" after the (Graphics2D), and what exactly does the "Graphics2D" Within the parenthesis mean, i am learning out of a book and neither of these were ever fully explained.

您正在将 Graphics2D 转换为 Graphics 上下文 g.在继承中阅读有关此处转换的更多信息> 在演员表部分.

You are casting Graphics2D to the Graphics context g. Read more about casting here in Inheritance in the Casting section.

这最终会分配您使用 Graphics2D 的可用方法和传递给 paintComponent 方法的 Graphics 上下文.Whitout 铸造,你将只限于 Graphics

What this ultimately does is allot you use the available methods of Graphics2D with the Graphics context of the passed to the paintComponent method. Whitout the casting, you'd only be limited to the methods of the Graphics class

Graphics2DGraphics 的子类,所以通过使用 Graphics2D 你可以获得 Graphics 的所有方法,同时Graphics2D 类中方法的优势.

Graphics2D is a subclass of Graphics so by using Graphics2D you gain all the methods of Graphics while taking advantage of the methods in the Graphics2D class.

附注

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

  • You shouldn't be override paint. Also if you are, you shouldn't be painting on top level containers like JApplet.

改为在 JPanelJComponent 上绘制并覆盖 paintComponent 而不是 paint 并调用 super.paintComponent.然后只需将 JPanel 添加到父容器.

Instead paint on a JPanel or JComponent and override paintComponent instead of paint and call super.paintComponent. Then just add the JPanel to the parent container.

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

自定义绘画中查看更多信息a> 和 Graphics2D