2011-02-28 51 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适用

,那么你可能有你的风俗画问题的每一个孩子。当您只使用标准组件而没有自定义绘画时会发生什么?