2011-02-28 40 views
0

對於一個學校項目,我正在用JAVA編寫一個BlackJack紙牌遊戲。JPanels,聽衆和線程

經過程序中的幾個步驟後,我的整個計算機系統變慢/斷斷續續,並且JFrame中的一些區域變黑。似乎不會發生重新粉刷。

我會用單詞給你一些程序細節,而不是提交代碼。

我已經做了幾乎每個GUI組件的廣泛擴展,以使它具有我想要的外觀和感覺。幾乎我使用的JComponent的每個孩子都會在適用的情況下將其paintComponent重寫爲自定義圖像背景和消除鋸齒。

在我的(自定義)JFrame中加載JPanel的擴展版本。該面板包含該屏幕的所有GUI組件。當我想切換屏幕(轉到程序的另一部分)時,我切換到JPanel的另一個擴展版本。我通過從JFrame中刪除所有元素並添加新面板來做到這一點。這些不同的面板實現了ActionListener和FocusListener。

在這一點上,我的想法傾向於一個線程處理問題。我目前的理論是這樣的:當一個面板被構建爲在JFrame中顯示時(每個面板在te程序中的不同階段),先前構建的面板不會被「銷燬」,並且這些面板的監聽器保持活動狀態。

我對你們的問題是,這個理論是否存在......在這種情況下,有沒有辦法'殺死'這些面板或至少停止聽力?

如果我的理論沒有意義,還有什麼可能導致這些症狀?它可能是paintComponent方法的廣泛覆蓋?

任何想法將高度appriciated!

問候威爾科

+1

沒有看到代碼,我真的懷疑任何人都可以幫助你。有一件事 - 我不明白爲什麼要從舊的JPanel中刪除所有組件 - 這不是必需的。你內存不足了嗎?你描述的行爲聽起來像你可能。 – Kaffiene 2011-02-28 02:42:01

回答

0

當面板被構造爲顯示在JFrame中(每個在不同的階段TE程序內),以前的構成面板不真的「銷燬」,並且這些面板的監聽保持活躍。

編號僅將事件分派給具有焦點的組件。它沒有焦點,它不會收到像KeyEvents和MouseEvents這樣的系統生成的事件。所以如果面板不可見,那麼它將不會收到事件。

我切換到JPanel的另一個擴展版本。我通過從JFrame中刪除所有元素並添加新面板來做到這一點。

這不是最好的設計。最好使用專爲此目的設計的Card Layout

幾乎JComponent的,我用得到了與自定義圖像背景和抗鋸齒的paintComponent rewriten適用

,那麼你可能有你的風俗畫問題的每一個孩子。當您只使用標準組件而沒有自定義繪畫時會發生什麼?