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”的使用
请帮我理解
或者这是一个我需要从另一个类调用的类,因为我正在扩展它
# 1 楼答案
不要使用新运算符创建
Graphics g
。它是通过public void paintComponent(Graphics g)
方法传入的请注意,Java实际上通过这个接口传递了一个
Graphics2D
对象(这使得强制转换成为可能),但是由于遗留的原因,通过使Graphics2D
对象从Graphics
继承来保持Graphics
接口您不创建新的
Graphics
对象的原因是,传递的Graphics
对象是其他小部件和AWT/Swing接口通常使用的对象就“使用”它而言,它是一个标准的Java对象。通过调用Java对象上的方法,将其像Java对象一样使用
ect
# 2 楼答案
paintComponent(Graphics g)
是从JComponent继承的方法(注意,paintComponent应该有@Override anotion),它是GUI绘图系统的一部分。它从JavaSwing框架调用,要求组件在屏幕上绘制自己。该方法过去的对象已实例化,可供使用您必须使用JFrame/JPanel等工具将组件添加到屏幕上,并使其可见以查看其工作情况
另外,由于您没有实现可测量的屏幕,所以需要在布局中为其添加一些空间,以查看结果(设置最小大小()在插入后,在帧之前)。pack())