2012-08-12 97 views
0
public PenApp() { 
    super("PenApp"); 
    pack(); 
    setVisible(true); 
    setVisible(false); 
    pack(); 
    setResizable(false); 
    pack(); 
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
    setLocation((d.width - CANVAS_SIZE)/2, (d.height - CANVAS_SIZE)/2); 
    setSize(CANVAS_SIZE + getInsets().left + getInsets().right, 
     CANVAS_SIZE + getInsets().top + getInsets().bottom); 
    addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) {System.exit(0);} 
    }); 

    img = Toolkit.getDefaultToolkit().getImage 
     (getClass().getResource("penguin.gif")); 
    img2 = Toolkit.getDefaultToolkit().getImage 
     (getClass().getResource("kuwa.gif")); 
    enableEvents(AWTEvent.MOUSE_EVENT_MASK); 
    x = getInsets().left; 
    y = getInsets().top; 

    setVisible(true); 
} 

這樣的一段代碼。我只是想知道爲什麼在這裏使用幾個pack()和setVisible()。 謝謝:)爲什麼打包多次?

+7

我的第一個想法是'因爲程序員不知道他們在做什麼,只是保持警惕/粘貼代碼行直到它神奇地工作'。不要研究那樣的代碼,也不要將代碼放在這樣寫的API上。 – 2012-08-12 03:15:14

回答

0

我們把物品放在一個容器中,我們可以通過setSize或pack來設置它們的大小。包裝是可取的,因爲它的尺寸是所有的內容都在他們的首選尺寸或以上;包離開框架佈局經理負責框架大小。

由於我們將一些GUI元素設置爲不可見,所以我們不需要空白空間,所以也許這就是爲什麼它被反覆使用。我會通過評論所有的軟件包來運行該應用程序,並驗證它是否確實有必要。

+0

作者給出的解釋是pack()方法的行爲受執行環境的限制。而這兩種方法的多重用法是處理環境造成的差異......其實我不明白他的話 – bunnyshell 2012-08-12 03:29:23

+1

@bunnyshell我懷疑包括作者在內的任何人都不理解這些詞。這個API的URL是什麼? – 2012-08-12 03:34:58

+0

他在說的是他使用setVisible/pack來最小化/消除Swing在不同窗口系統(mac,windows,unix)上渲染組件的方式的差異。我的猜測是,作者'放棄了很多代碼讓它做出了一些工作,而沒有真正理解事情出錯的地方。也就是說,在您準備好解決這些問題之前,我會謹慎地將其刪除。 – 2012-08-12 03:35:57