Java-Swing-graphics2d

Java-Swing-graphics2d,java,swing,graphics2d,paintcomponent,Java,Swing,Graphics2d,Paintcomponent,我不确定什么是graphics2dg2d=(Graphics2D)g应该做的事 它只是一个普通的JPanel,后来添加到JFrame上 如果有人能给我一些建议,那将非常有帮助,因为我已经在这行代码上呆了很长时间。这是一个与旧Java代码兼容的问题 如文档中所述,Graphics2D是一个继承自Graphics的类,并提供一些额外的图形功能:简而言之,Graphics2D是一个更强大的Graphics 现在,方法paintComponent(Graphics g)从Graphics2D之前就存在了

我不确定什么是
graphics2dg2d=(Graphics2D)g应该做的事

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


如果有人能给我一些建议,那将非常有帮助,因为我已经在这行代码上呆了很长时间。

这是一个与旧Java代码兼容的问题

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

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

在运行时传递的
g
是一个
Graphics2D
,但您需要强制转换它,以便允许您对其调用更高级的操作。

语句

public class Points extends JPanel {

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

  Graphics2D g2d = (Graphics2D) g;

  g2d.drawLine(60, 20, 80, 90);
 }
}
只需将
Graphics
对象强制转换为
Graphics2D
。它用于访问
Graphics2D
提供的方法。在这种情况下,这是不必要的,因为
Graphics
还有一个
drawLine
方法,因此如果您不需要更高级的方法,例如
rotate
translate
,您可以使用

Graphics2D g2d = (Graphics2D) g;

它将图形上下文强制转换为
Graphics2D
对象。这是很有用的,因为
Graphics2D
允许旋转、变换、抗锯齿等,而普通
Graphics
对象无法实现。当您使用
Graphics2D
时,
Graphics
中可用的所有方法仍然可用

您正在将
g
强制转换为
Graphics2D
,这样您就可以在
Graphics2D
类中获得高级功能。

它只是将
Graphics
对象强制转换为
Graphics2D
对象
Graphics2D
具有许多
Graphics
无法提供的功能,这些功能对于绘制2D图形非常有用。请在此处查看Graphics2D的文档:


另外,根据,这个角色应该总是安全的。

我根本不知道你可以用对象来做这个。我对编程相当陌生,当我学习了一些基础知识后,我就开始编写代码了,所以在教程中我跳过了很多东西。最后一件事,你可以将对象强制转换为子类,对吗?不仅仅是子类。在这种情况下,
Graphics2D
Graphics
的一个子类,因此您可以对引用
g
进行向下转换或更正确地向下转换。但更一般地说,如果任何对象实现了一个接口,那么您也可以强制转换到该接口。只要对象是另一个对象的类型,就可以强制转换。
@Override
public void paintComponent(Graphics g) {
   super.paintComponent(g);
   g.drawLine(60, 20, 80, 90);
}