gpt4 book ai didi

java - Java 中的图形类是如何工作的?

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:30 24 4
gpt4 key购买 nike

最近,我一直在尝试用图形做一些 Java 工作。现在 Graphics 类是抽象的,这意味着它本身不能被实例化,但它的子类可能能够被实例化。那么下面的代码是怎么回事。 (确实成功创建了一条线)

import javax.swing.*;
import java.awt.*;

public class line extends JPanel {
public void paintComponent(Graphics g) {
g.drawLine(0, 0, 90, 90);
}

public static void main(String[] args) {
JFrame jf = new JFrame();
jf.add(new line());
jf.setSize(500, 500);
jf.setVisible(true);
}
}

好吧,现在有些事情对我来说没有意义。首先,调用 line 时,它​​必须在 line 类中启用 paintComponent 方法。这是静态方法的属性(使用类名调用)。但是 paintComponent 方法没有静态修饰符。

由于该程序可以运行,但我们必须假设 paintComponent 确实被调用并且需要一个 Graphics 对象作为参数。当它被调用时,虽然它没有参数。为什么这不会产生错误?我运行了一些测试,传入了一个 String,然后没有传入一个需要 Integer 对象的方法。我在这两个程序上都遇到了错误。

因此以某种方式创建了一个名为 g 的图形对象,并使用 drawline 方法。但是图形是抽象的。

好的,这是我的问题:

  1. 为什么在 paintComponent 不是静态的情况下调用它的类行时自动调用 paintComponent?

  2. 为什么 paintComponent 在需要 Graphics 对象时接受空参数?

  3. Graphics类是抽象的,无法实例化,那么Graphics对象g是怎么生成的呢?

帮助我 Stack Overflow,你是我唯一的希望。

编辑:好的,我认为这个问题已经很好地回答了,谢谢!

最佳答案

  1. paintComponent 在 AWT 决定是时候绘制窗口时被调用(在大多数情况下是因为操作系统向它发送一条消息告诉它这样做)。当它绘制 JFrame 时,它​​会遍历其中的对象树。其中是您的 line 实例,因为您使用 jf.add(new Line()) 调用添加了它。在其中每一个上都调用了 paintComponent 方法。

  2. 它不接受空参数。

  3. 当 AWT 调用 paintComponent 时,它传递一个继承自 Graphics 的具体类的实例。

签名 paintComponent(Graphics g) 并不是说​​参数应该完全是 Graphics 类型。但实际上说它应该是 Graphics 类型或任何继承自 Graphics 的类。另一种看待它的方式是说任何继承自 Graphics 的类也是 Graphics 类型。

关于java - Java 中的图形类是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11806576/

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