获取 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
Graphics2D
是 Graphics
的子类,所以通过使用 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 likeJApplet
.
改为在 JPanel
或 JComponent
上绘制并覆盖 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;
}
}