gpt4 book ai didi

java - 传递给 Paint() 调用的顶级组件是什么?

转载 作者:行者123 更新时间:2023-12-02 03:34:13 24 4
gpt4 key购买 nike

回顾一些与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 中,该类名为 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 - 传递给 Paint() 调用的顶级组件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37636389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com