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”到底意味着什么,我是从一本书中学到的,但这两个词都没有得到充分的解释。
发布于 2014-02-11 18:45:50
您正在将Graphics2D转换为Graphics上下文g。在Inheritance中阅读更多关于强制转换的部分。
最终所做的是分配您使用Graphics2D的可用方法和传递给paintComponent方法的Graphics上下文。只限于Graphics类的方法
Graphics2D是Graphics的一个子类,因此通过使用Graphics2D,可以获得Graphics的所有方法,同时利用Graphics2D类中的方法。
边备注
paint。此外,如果您是,您不应该在顶层容器,如JApplet绘画。JPanel或JComponent上进行绘制,并重写paintComponent而不是paint并调用super.paintComponent。然后,只需将JPanel添加到父容器。
公共DrawPanel扩展了JPanel {@重写受保护的无效paintComponent(图形g) { super.paintComponent(g);Graphics2D g2 = (Graphics2D)g;}参见Custom Painting和Graphics2D上的更多内容
发布于 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是安全的。
https://stackoverflow.com/questions/21710323
复制相似问题