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);
}