首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拿到Graphics2D了?

拿到Graphics2D了?
EN

Stack Overflow用户
提问于 2014-02-11 18:40:11
回答 2查看 1.6K关注 0票数 1
代码语言:javascript
复制
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);

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

代码语言:javascript
复制
Graphics2D g2 = (Graphics2D)g;

为什么你必须在(Graphics2D)后面加上"g“,括号中的"Graphics2D”到底意味着什么,我是从一本书中学到的,但这两个词都没有得到充分的解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-11 18:45:50

您正在将Graphics2D转换为Graphics上下文g。在Inheritance中阅读更多关于强制转换的部分。

最终所做的是分配您使用Graphics2D的可用方法和传递给paintComponent方法的Graphics上下文。只限于Graphics类的方法

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

边备注

  • 您不应该重写paint。此外,如果您是,您不应该在顶层容器,如JApplet绘画。
  • 相反,在JPanelJComponent上进行绘制,并重写paintComponent而不是paint并调用super.paintComponent。然后,只需将JPanel添加到父容器。 公共DrawPanel扩展了JPanel {@重写受保护的无效paintComponent(图形g) { super.paintComponent(g);Graphics2D g2 = (Graphics2D)g;}

参见Custom PaintingGraphics2D上的更多内容

票数 3
EN

Stack Overflow用户

发布于 2014-02-11 18:42:50

是的,你必须包括g

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

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

您必须包括g,这样您就可以输入类型了。如果不包含对象,则会出现编译错误,因为语句没有完成。

g类型转换为Graphics2D对象的原因是因为您告诉编译器,“这个图形对象实际上是一个Graphics2D对象。”这样,您就可以执行Graphics2D对象具有的Graphics对象没有的函数。

如果您对此有更多的疑问,这个stackoverflow answer很好地解释了Java中的转换变量。这个stackoverflow answer解释了为什么从Graphics转换到Graphics2D是安全的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21710323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档