2013-05-30 114 views
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;应该做什么。Java - Swing - 图形2D

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

如果任何人都可以给我一些建议,现在我被困在这行代码很长时间,这将是非常有益的。

回答

1

声明

Graphics2D g2d = (Graphics2D) g; 

只是铸Graphics对象到Graphics2D。它用于访问由Graphics2D提供的方法。在这种情况下,它是不必要的,因为Graphics也有一个drawLine方法,所以如果你不具备更先进的方法,如rotatetranslate的要求,你可以使用

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawLine(60, 20, 80, 90); 
} 
+0

我不知道你可以用对象来做到这一点。 我对编程非常陌生,当我学习了一些基础知识之后,我就跳入了编程,所以我在教程 – user2347921

+0

中跳过了很多东西。最后一件事,您只能将对象转换为子类, 对 ? – user2347921

+0

不仅仅是一个子类。在这种情况下'Graphics2D'是'Graphics'的一个子类,所以你可以更准确地向下转换引用'g'。但更普遍的是,如果任何对象实现了一个接口,那么你也可以投射到该接口。如果Object **是另一个对象的**类型,则可以强制转换。 – Reimeus

1

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

Graphics2D,如在文档说明的那样,是从Graphics继承并提供了一些附加的图形特征的类:在短Graphics2D是更强大的Graphics。现在

,该方法paintComponent(Graphics g)从之前Graphics2D所以即使与当前Java是一个JPanel的引擎盖下的图形是一个Graphics2D存在,签名还没有改变,打破现有的代码。

在运行时,g通过的是Graphics2D,但是您需要将其转换为允许您调用更高级的操作。

0

它蒙上图形上下文成Graphics2D对象。这很有用,因为Graphics2D允许旋转,变换,抗锯齿等不可能与正常的Graphics对象一起使用。当您使用Graphics2D时,Graphics中的所有可用方法仍可供您使用。

0

您正在铸造g作为Graphics2D,因此您可以获得Graphics2D课程中的高级功能。