1
public class Points extends JPanel {

  public void paintComponent(Graphics g) {
  super.paintComponent(g);

  Graphics2D g2d = (Graphics2D) g;

  g2d.drawLine(60, 20, 80, 90);
 }
}

我不确定Graphics2D g2d = (Graphics2D) g;应该做什么。

它只是一个普通的 JPanel,后来被添加到 JFrame 中。

如果有人可以给我一些建议,那将非常有帮助,因为我在这行代码中停留了很长时间。

4

5 回答 5

1

这是与旧 Java 代码的兼容性问题。

Graphics2D,如文档中所述,是一个继承自Graphics并提供一些附加图形功能的类:简而言之Graphics2D,它是一个更强大的Graphics.

现在,该方法paintComponent(Graphics g)从以前就存在了,Graphics2D因此即使使用当前的 Java,JPanel 引擎盖下的 Graphics 是 a Graphics2D,签名也没有被更改以破坏现有代码。

在运行时g传递的是 aGraphics2D但您需要对其进行强制转换,以便您可以对其调用更高级的操作。

于 2013-05-30T20:25:16.873 回答
1

该声明

Graphics2D g2d = (Graphics2D) g;

只是将Graphics对象转换为Graphics2D. 它用于访问由Graphics2D. 在这种情况下,它是不必要的,因为Graphics也有一个drawLine方法,所以如果您不需要更高级的方法,例如rotateand translate,您可以使用

@Override
public void paintComponent(Graphics g) {
   super.paintComponent(g);
   g.drawLine(60, 20, 80, 90);
}
于 2013-05-30T20:25:25.807 回答
0

那只是将您的Graphics对象转换为Graphics2D对象。 Graphics2D有很多Graphics没有提供的功能,这些功能对于绘制 2D 图形非常有用。在此处查看 Graphics2D 的文档:

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

另外,根据this other question,该演员应该始终安全。

于 2013-05-30T20:25:57.237 回答
0

它将图形上下文转换为Graphics2D对象。这很有用,因为允许旋转、变换、抗锯齿等对于普通对象Graphics2D是不可能的。当您Graphics使用.GraphicsGraphics2D

于 2013-05-30T20:25:32.907 回答
0

您正在铸造gGraphics2D因此您可以获得课程中的高级功能Graphics2D

于 2013-05-30T20:25:38.313 回答