传递给 paint() 调用的顶级组件是什么?
What is the top level component passed to the paint() call?
查看一些与 Java 和图形相关的教程并不断看到以下内容:
public void paint (Graphics g)
{
Graphics2D g2;
g2 = (Graphics2D) g;
:
:
}
Graphics 和 Graphics2D 都是抽象的 类。
另外,Graphics2D 是 Graphics 的子类。
因此,从 Graphics 到 Graphics2D (g2 = (Graphics2D) g;) 的转换应该不起作用,对吗?
public class Object1 {
int obj1Var1;
public void obj1_Method1()
{
System.out.println("Inside Object1:Method1");
}
}
public class Object2 extends Object1{
int obj2var1;
public void obj2_Method1()
{
System.out.println("Inside Object2:Method1");
}
}
使用上面的,这与 Graphics / Graphics2D 场景有点相似,表明它无法使用以下内容。
Object1 obj = new Object1();
Object2 obj2 = (Object2)obj; <----This fails as expected.
既然从 Graphics 到 Graphics2D 的转换是有效的(尤其是因为它们是抽象对象),那么内存中的原始对象必须已经是 Graphics2D 并且定义了抽象方法。那么,传递给 paint() 调用的 Graphics 对象所引用的内存中的实际底层对象是什么?
在 Oracle JDK 中,class 称为 sun.java2d.SunGraphics2D
。您可以 运行 这个程序来查看它在您的 Java 版本中的内容:
import java.awt.Graphics;
import javax.swing.JFrame;
public class SwingTest {
private static class Frame extends JFrame {
@Override
public void paint(Graphics g) {
super.paint(g);
System.out.println(g.getClass().getName());
}
}
public static void main(String[] args) {
Frame frame = new Frame();
frame.setVisible(true);
}
}
查看一些与 Java 和图形相关的教程并不断看到以下内容:
public void paint (Graphics g)
{
Graphics2D g2;
g2 = (Graphics2D) g;
:
:
}
Graphics 和 Graphics2D 都是抽象的 类。 另外,Graphics2D 是 Graphics 的子类。 因此,从 Graphics 到 Graphics2D (g2 = (Graphics2D) g;) 的转换应该不起作用,对吗?
public class Object1 {
int obj1Var1;
public void obj1_Method1()
{
System.out.println("Inside Object1:Method1");
}
}
public class Object2 extends Object1{
int obj2var1;
public void obj2_Method1()
{
System.out.println("Inside Object2:Method1");
}
}
使用上面的,这与 Graphics / Graphics2D 场景有点相似,表明它无法使用以下内容。
Object1 obj = new Object1();
Object2 obj2 = (Object2)obj; <----This fails as expected.
既然从 Graphics 到 Graphics2D 的转换是有效的(尤其是因为它们是抽象对象),那么内存中的原始对象必须已经是 Graphics2D 并且定义了抽象方法。那么,传递给 paint() 调用的 Graphics 对象所引用的内存中的实际底层对象是什么?
在 Oracle JDK 中,class 称为 sun.java2d.SunGraphics2D
。您可以 运行 这个程序来查看它在您的 Java 版本中的内容:
import java.awt.Graphics;
import javax.swing.JFrame;
public class SwingTest {
private static class Frame extends JFrame {
@Override
public void paint(Graphics g) {
super.paint(g);
System.out.println(g.getClass().getName());
}
}
public static void main(String[] args) {
Frame frame = new Frame();
frame.setVisible(true);
}
}