最近,我一直在尝试用图形做一些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);
}
}
Run Code Online (Sandbox Code Playgroud)
好的,现在有一些事情对我没有意义.首先,当调用line时,它必须在line类中执行paintComponent方法.这是静态方法的属性(使用类名称调用).但paintComponent方法没有静态修饰符.
由于这个程序有效,我们必须假设paintComponent被调用并且期望Graphics对象作为参数.虽然它没有参数被调用.为什么这不会产生错误?我运行了一些测试,传入一个字符串,然后没有任何东西进入一个期望一个Integer对象的方法.我在这两个程序上都有错误.
因此,某种方式创建了一个名为g的图形对象,并使用了drawline方法.但图形是抽象的.
好的,这是我的问题:
当paintComponent不是静态时,为什么在调用类行时会自动调用paintComponent?
为什么paintComponent在需要Graphics对象时会接受空参数?
然后如何制作Graphics对象,因为Graphics类是抽象的并且无法实例化?
帮我Stack Overflow,你是我唯一的希望.
编辑:好的,我认为这个问题得到了很好的回答,谢谢!