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

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


如果g是图形,它可以工作,但是如果是graphics2d,则不能。两者都可以编译,但是graphics2d不会改变背景颜色。怎么会?

最佳答案

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 specifications for the JComponent class(是JPanel的超类)具有方法摘要,该摘要列出了该类中的所有方法。

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


Lesson: Performing Custom Painting中的The Java Tutorials
Painting in AWT and Swing

关于java - 代码适用于Java图形,但不适用于graphics2d,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/576235/

10-09 19:30