2011-02-28 5 views
0

Pour un projet scolaire, j'écris un jeu de cartes BlackJack en JAVA. Après quelques étapes dans le programme, tout mon système d'ordinateur ralentit/bégaie et certaines zones dans le JFrame deviennent noires. Aucune repeinte ne semble se produire.JPanels, auditeurs et fils

Je vais vous donner quelques détails du programme en mots plutôt que de soumettre le code.

J'ai effectué une extension étendue de presque tous les composants de l'interface graphique pour lui donner l'apparence que je recherche. Presque tous les enfants de JComponent que j'utilise ont réécrit paintComponent avec des arrière-plans d'image personnalisés et un anti-aliasing, le cas échéant.

Dans mon JFrame (personnalisé), je charge une version étendue de JPanel. Ce panneau contient tous les composants de l'interface graphique pour cet écran. Quand je veux changer d'écran (aller à une autre partie du programme), je passe à une autre version étendue de JPanel. Je fais cela en supprimant tous les éléments du JFrame et en ajoutant le nouveau panneau. Ces différents panneaux implémente ActionListeners et FocusListeners.

À ce stade, mes pensées se penchent vers un problème de manipulation de thread. Ma théorie pour le moment est la suivante: Lorsqu'un panneau est construit pour être affiché dans le JFrame (chacun sur différentes étapes du programme), les panneaux construits précédemment ne sont pas vraiment "détruits", et les auditeurs de ces panneaux restent actifs.

Ma question pour vous est de savoir si cette théorie tient bon ... Et dans ce cas, y a-t-il un moyen de «tuer» ces panneaux ou au moins d'arrêter l'écoute?

Si ma théorie n'a pas de sens, quoi d'autre pourrait causer ces symptômes? Serait-ce l'écrasement complet des méthodes paintComponent?

Toutes les idées seraient très appréciées!

salutations Wilco

+1

Sans voir de code, je doute vraiment que quelqu'un puisse vous aider. Une chose - je ne vois pas pourquoi vous supprimez tous les composants de l'ancien JPanel - ce n'est pas nécessaire. Êtes-vous à court de mémoire? Le comportement que vous décrivez ressemble à ce que vous pourriez être. – Kaffiene

Répondre

0

Lorsqu'un panneau est construit pour l'affichage dans le DFrame (chacun sur différentes étapes à l'intérieur de te programme), les panneaux construits précédents ne sont pas vraiment « détruits », et les auditeurs de ces panneaux rester actif.

Non. Les événements sont uniquement distribués au composant qui a le focus. Si un composant n'a pas de focus, il ne recevra pas d'événements générés par le système tels que KeyEvents et MouseEvents. Donc, si un panneau n'est pas visible, il ne recevra pas d'événements.

Je passe à une autre version étendue de JPanel. Je fais cela en supprimant tous les éléments du JFrame et en ajoutant le nouveau panneau.

Ce n'est pas le meilleur design. Il est préférable d'utiliser un Card Layout qui a été conçu à cet effet.

Presque tous les enfants de JComponent que j'utiliser a obtenu son de paintComponent avec réécrit arrière-plans d'image personnalisés et anti-aliasing, le cas échéant

alors vous avez probablement des problèmes avec votre peinture sur mesure. Que se passe-t-il lorsque vous utilisez simplement les composants standard sans peinture personnalisée?