您如何使用图形 'g'?

How Do You Use Graphics 'g'?

我在初学者 class 中教 java,在我们的阅读中,他们给出了一个关于使用图形绘制项目的示例。所以,我将代码发布到我的 IDE 中并进行了试用。

他们发布的代码本应创建一张外星人脸

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import javax.swing.JComponent;

/*
   A component that draws an alien face
*/
public class FaceComponent extends JComponent
{  
   public void paintComponent(Graphics g)
   {  
      // Recover Graphics2D 
      Graphics2D g2 = (Graphics2D) g;

      // Draw the head
      Ellipse2D.Double head = new Ellipse2D.Double(5, 10, 100, 150);
      g2.draw(head);

      // Draw the eyes
      g2.setColor(Color.GREEN);
      Rectangle eye = new Rectangle(25, 70, 15, 15);
      g2.fill(eye);
      eye.translate(50, 0);
      g2.fill(eye);

      // Draw the mouth
      Line2D.Double mouth = new Line2D.Double(30, 110, 80, 110);
      g2.setColor(Color.RED);
      g2.draw(mouth);

      // Draw the greeting
      g2.setColor(Color.BLUE);
      g2.drawString("Hello, World!", 5, 175);
   }
}

但是我不确定您是如何创建调用该函数的图形的。我原以为您会使用

Graphics g = new Graphics();

就像你如何调用一个新的 class,但这是一个错误。我尝试查看文档,但它似乎掩盖了您用于 'g'.

的内容

请帮我理解。

或者这是一个 class 我需要从另一个 class 调用的情况,因为我正在扩展它?

paintComponent(Graphics g)是继承自JComponent的方法(注意paintComponent要有@Override注解),是GUI绘制系统的一部分。它是从 Java Swing Framework 调用的,要求组件在屏幕上绘制自身。传递给该方法的对象已经实例化并且可以有效使用。

您必须像 JFrame/JPanel 一样将您的组件添加到屏幕上,并使其可见才能正常工作。

此外,由于您没有实现可测量屏幕,因此您需要在布局中向其添加一些 space 以查看结果(setMinimumSize() 在启动之后,在 frame.pack() 之前) .

不要使用新运算符创建 Graphics g。通过public void paintComponent(Graphics g)方法传入。

请注意,Java 实际上通过此接口传递了一个 Graphics2D 对象(这使得转换成为可能)但是由于遗留原因,通过使 Graphics2D 对象继承自 Graphics.

您不创建新的 Graphics 对象的原因是因为传递的 Graphics 对象是您的其余小部件使用的对象,而 AWT/Swing界面一般。

就"using"而言,它是一个标准的Java对象。通过调用它的方法,像 Java 对象一样使用它。

g.setColor(...);

等等