2013-05-30 152 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課程中的高級功能。