JPanels,Listeners和Threads

时间:2011-02-28 02:36:32

标签: java multithreading listener jframe jpanel

对于一个学校项目,我正在用JAVA写一个BlackJack纸牌游戏。

在程序中执行了几个步骤后,我的整个计算机系统变慢/断断续续,JFrame中的某些区域变黑。似乎没有重新粉刷。

我会用文字给你一些程序细节,而不是提交代码。

我已经对几乎所有GUI组件进行了一些广泛的扩展,以赋予它我想要的外观和感觉。几乎我使用的JComponent的每个子项都使用自定义图像背景和抗锯齿(如果适用)重写了paintComponent。

在我的(自定义)JFrame中,我加载了JPanel的扩展版本。该面板包含该屏幕的所有GUI组件。当我想切换屏幕(转到程序的不同部分)时,我切换到另一个扩展版本的JPanel。我这样做是通过从JFrame中删除所有元素并添加新面板。这些不同的面板实现了ActionListeners和FocusListeners。

此时我的想法倾向于线程处理问题。我当前的理论是这样的:当构建一个面板以便在JFrame中显示时(每个面板都在te程序中的不同阶段),之前构建的面板不会被真正“销毁”,并且这些面板的监听器仍然处于活动状态。 / p>

对于你们这些人来说,我的问题是,这个理论是否存在......在这种情况下,有没有办法“杀死”这些小组或至少停止倾听?

如果我的理论没有意义,还有什么可能导致这些症状?可能是paintComponent方法的广泛覆盖?

任何想法都会受到高度关注!

关心威尔科

1 个答案:

答案 0 :(得分:0)

  

当构建一个面板以便在JFrame中显示时(每个面板都在te程序中的不同阶段),之前构建的面板不会被“销毁”,并且这些面板的监听器仍然处于活动状态。

没有。仅将事件分派给具有焦点的组件。它是一个组件没有焦点,然后它不会收到系统生成的事件,如KeyEvents和MouseEvents。因此,如果某个面板不可见,那么它将不会接收事件。

  

我切换到JPanel的另一个扩展版本。我这样做是通过从JFrame中删除所有元素并添加新面板。

这不是最好的设计。最好使用专为此目的而设计的Card Layout

  

我使用的JComponent的几乎每个子项都使用自定义图像背景重写了paintComponent,并在适用的情况下使用抗锯齿

然后你的自定义绘画可能有问题。只使用没有自定义绘画的标准组件会发生什么?