有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用图形“g”?

我在一个教授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();

就像你如何调用一个新类,但这是一个错误。我试图查看文档,但它似乎掩盖了您对“g”的使用

请帮我理解

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


共 (2) 个答案

  1. # 1 楼答案

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

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

    您不创建新的Graphics对象的原因是,传递的Graphics对象是其他小部件和AWT/Swing接口通常使用的对象

    就“使用”它而言,它是一个标准的Java对象。通过调用Java对象上的方法,将其像Java对象一样使用

    g.setColor(...);
    

    ect

  2. # 2 楼答案

    paintComponent(Graphics g)是从JComponent继承的方法(注意,paintComponent应该有@Override anotion),它是GUI绘图系统的一部分。它从JavaSwing框架调用,要求组件在屏幕上绘制自己。该方法过去的对象已实例化,可供使用

    您必须使用JFrame/JPanel等工具将组件添加到屏幕上,并使其可见以查看其工作情况

    另外,由于您没有实现可测量的屏幕,所以需要在布局中为其添加一些空间,以查看结果(设置最小大小()在插入后,在帧之前)。pack())