2010-01-23 64 views
3

我開發了一個包含12個JPanel的Swing GUI。最初,所有JPanel的代碼都寫在主要的JFrame類代碼中。結果,代碼變得太長(超過10,000行)。代碼是否應該由EDT(Event Dispatch Thread)執行或不執行?

現在我想重構代碼,將代碼拆分爲13個類(每個類12個類,其中一個爲JPanel,另一個爲主類JFrame),而不是一個類承載所有代碼。

但我有一些困惑是如下:

  1. 最初的12個JPanel小號上分別設置了一個「卡」 JPanelJPanel設置爲CardLayout,以便只有1「卡」的佈局JPanel其中12 JPanel顯示在一個基於點擊使用的按鈕。現在,當我從MainJForm中分離出那些12 JPanel並將其中的每一個都實現爲它自己的類時,我想我需要在用戶單擊按鈕時首先實例化相應的JPanel。那麼,在EDT(Event Dispath Thread)上執行這個繁重的任務會更好嗎?如果不是,那麼它是否會在SwingWorker線程中創建一個JPanel的實例並傳遞一個ref。到EDT?

回答

1

您可以完全安裝您的面板,就像他們全部在同一班級時一樣。因此,如果以前的實現在框架實例化上創建了所有對象,則可以同樣實例化您的12個面板對象。如果在面板顯示按鈕點擊時立即執行此操作,則以同樣的方式進行操作。

在這種情況下執行代碼時,代碼放置位置的問題應該不會影響問題,至少只要以前沒有問題(ui在按鈕單擊時切換面板時會掛起) 。

當然,您可以先創建一個最初顯示的面板,然後使用一個擺動工具來創建其他工具,以便第一個立即顯示,而其他工具在按鈕被點擊時立即顯示而不必實例化然後第一。只要確保你注意調用改變當前顯示的UI的調用(例如在框架中添加實例化的面板)。

0

構建EDT中JPanel的12個實例不應該成爲問題。我會繼續前進,讓他們這樣。這會讓你的代碼更容易閱讀。謹防過早優化。如果遇到性能問題,我只會優化性能。