這是個非常簡單的swing例子,更復雜的功能我也基本能達成了。但是運行機制不理解。
我在paint方法里畫了一個長方形,運行就可以看到結果。
但是,你看代碼里沒有一句話是呼叫paint方法,它怎么就自動被呼叫了?paint方法引數要傳一個Graphics物件,然而我并沒有創建Graphics物件,它怎么就自動有了?
import java.awt.*;
public class A extends Frame {
public A(){
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
g.fillRect(50, 50, 180, 120);
}
public static void main(String[] args) {
new A();
}
}
uj5u.com熱心網友回復:
感覺好像是未經同意就創建了Graphics物件,私自運行paint方法。
uj5u.com熱心網友回復:
這些問題你需要分析原始碼,一般都是在構造法或者靜態代碼塊中實作。
uj5u.com熱心網友回復:
用new A()創建繼承了Frame的物件后就會呼叫Frame的建構式。可以打開原始碼里的Frame類建構式看。uj5u.com熱心網友回復:
Frame原始碼的構造方法我看了,兜兜轉轉的,沒有明顯地看到呼叫paint方法。
鑒于目前讀原始碼能力不夠,無法理解它們是如何被自動呼叫的,只知道反正被呼叫了。
uj5u.com熱心網友回復:
你當然找不到了,因為它根本沒呼叫paint,而是執行的這個
uj5u.com熱心網友回復:
放心,你寫出來的方法不會白寫的,底層會自動呼叫的。你可以參考原始碼的paintComponent方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195430.html
標籤:Java SE
上一篇:java制作簡易計算器
下一篇:關于建行網銀退款
