0

在一个paintcomponent里面。它以g为参数,g可以是graphics或graphics2d。该类扩展了 jpanel。然后:

super.paintComponent(g);
this.setBackground( Color.BLACK );

如果 g 是 graphics 它可以工作,但如果它是 graphics2d 它不会。它可以同时编译,但 graphics2d 不会改变背景颜色。怎么来的?

4

1 回答 1

4

JPanel(它是 的子类JComponent)只有一个paintComponent(Graphics)方法。它没有带有签名的方法paintComponent(Graphics2D)

覆盖该paintComponent(Graphics)方法可以通过以下方式完成:

public void paintComponent(Graphics g)
{
    // Do things.
}

但是,使用如下签名定义一个方法paintComponent(Graphics2D)是合法的,但它永远不会被调用,因为它不会覆盖定义于 中的任何方法JComponent

public void paintComponent(Graphics2D g)
{
    // Do things.
    // However, this method will never be called, as it is not overriding any
    // method of JComponent, but is a method of the class this is defined in.
}

该类(它是 的超类)的Java API 规范JComponentJPanel有一个方法摘要,其中列出了属于该类的所有方法。

有关在 Swing 中绘画的更多信息;

于 2009-02-23T03:06:20.397 回答