簡體   English   中英

AWT:我正在嘗試學習 Java,但無法理解以下程序

[英]AWT: I am trying to learn Java and was unable to understand the following program

  1. f.add(new MyCanvas()) 中的“new MyCanvas()”是什么?
  2. 即使在 CanvasExample 類構造函數或 main() 方法中都沒有調用 Paint() 方法,我們是如何得到橢圓的
  3. main() 方法中的新 CanvasExample() 是什么

import java.awt.*;

public class CanvasExample {  
    public CanvasExample() {  
        Frame f = new Frame("Canvas Example");  
        f.add(new MyCanvas());  
        f.setLayout(null);  
        f.setSize(400, 400);  
        f.setVisible(true);  
    }  

    public static void main(String args[]) {  
        new CanvasExample();
    }  
}  

class MyCanvas extends Canvas {  
    public MyCanvas() {  
        setBackground (Color.GRAY);  
        setSize(300, 200);  
    }

    public void paint(Graphics g){  
        g.setColor(Color.red);  
        g.fillOval(75, 75, 150, 75);  
    } 
}

請解釋

  1. 它是Canvas類的一個實例。 在 Java 中new是用於創建對象(給定類的實例)的關鍵字。 話雖如此 - new Canvas()創建Canvas類的新實例。 類名后面的括號表示構造函數——當你想創建一個給定類型的對象時被調用的代碼塊。

  2. 因為調用paint方法所以得到了橢圓形。 它只是沒有從您的代碼中明確調用。 正如您在Oracle 發布的這篇教程文章中所讀到的, paint方法將始終作為所謂的“回調機制”被觸發。 該方法屬於Container類。 我建議閱讀有關它的文檔 paint的方法MyCanvas類覆蓋了paint的方法Canvas 當擴展Canvas類並覆蓋paint方法時,您應該始終在方法的開頭調用 super 方法。 您可以在我已經包含在這一點的鏈接中了解原因。

  3. 與第 1 點一樣 - new CanvasExample()創建MyCanvas類的新實例。 更具體地說,它調用構造函數( public CanvasExample() { ... } )。 在您提供的代碼中, CanvasExample 的構造函數創建了Frame類型的新對象並調用了其中的一些方法。 其中一種方法是add ,它是由Frame類從其超類Container繼承的。
    正如Java awt API 所解釋的, add方法:

    將指定的組件附加到此容器的末尾。

我希望你會明白:D

首先它調用public static void main(String args[])
然后main創建類CanvasExample新實例並調用其構造函數CanvasExample()

該構造函數創建名為“f”的類Frame新實例並調用類Frame構造函數,它將該框架的標題設置為“Canvas Example”
在構造函數CanvasExample()下一行中,它創建並將類MyCanvas新實例添加到名為“f”的Frame實例中
構造函數CanvasExample()第三行它只是將“f”的布局設置為null
構造函數CanvasExample()第四行將“f”的大小設置為 400x400
構造函數CanvasExample()第五行它只​​是在屏幕上顯示“f”(所以你可以看到它)
並在構造函數CanvasExample()結束時返回main

創建類MyCanvas新實例時稱為它的構造函數,該構造函數將其背景設置為“Color.GRAY”,並將其大小設置為MyCanvas()和所有MyCanvas()構造函數

每次需要再次渲染“f”時,它都會調用MyCanvas類實例的方法paint(Graphics g) ,該實例小於“f”,因此您可以看到后面的白色
那個白色是“f”的背景

我想這就是你所要求的。
祝你今天過得愉快

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM