JPanels, Слушатели и Темы - PullRequest
       29

JPanels, Слушатели и Темы

0 голосов
/ 28 февраля 2011

Для школьного проекта я пишу карточную игру BlackJack на JAVA.

После нескольких шагов в программе вся моя компьютерная система замедляется / заикается, а некоторые области внутри JFrame становятся черными.Похоже, что перерисовки не происходит.

Я дам вам несколько слов о программе, а не отправляю код.

Я сделал несколько расширений почти каждого компонента графического интерфейса, чтобы он выглядел более наглядно.и чувствую, что хочу.Почти каждый дочерний элемент JComponent, который я использую, переписывает свой paintComponent с пользовательскими фонами изображений и сглаживанием, где это применимо.

В моем (пользовательском) JFrame я загружаю расширенную версию JPanel.Эта панель содержит все компоненты графического интерфейса для этого экрана.Когда я хочу переключить экран (перейти в другую часть программы), я переключаюсь на другую расширенную версию JPanel.Я делаю это, удаляя все элементы из JFrame и добавляя новую панель.Эти различные панели реализуют ActionListeners и FocusListeners.

На данный момент мои мысли склоняются к проблеме обработки потоков.Моя теория на данный момент такова: когда создается панель для отображения в JFrame (каждая на разных этапах в программе), предыдущие созданные панели не «уничтожаются», и прослушиватели этих панелей остаются активными.

Мой вопрос к вам, люди, является ли эта теория обоснованной ... И в таком случае, есть ли способ "убить" эти панели или, по крайней мере, остановить прослушивание?

Если мойтеория не имеет смысла, что еще может быть причиной этих симптомов?Может ли это быть обширная перезапись методов paintComponent?

Любые идеи будут высоко оценены!

С уважением, Вилко

1 Ответ

0 голосов
/ 28 февраля 2011

Когда панель создается для отображения в JFrame (каждая на разных этапах в программе), предыдущие построенные панели не «разрушаются», и прослушиватели этих панелей остаются активными.

Нет. События отправляются только компоненту, который имеет фокус. Если у компонента нет фокуса, то он не получит генерируемые системой события, такие как KeyEvents и MouseEvents Поэтому, если панель не видна, она не будет получать события.

Я переключаюсь на другую расширенную версию JPanel. Я делаю это, удаляя все элементы из JFrame и добавляя новую панель.

Это не самый лучший дизайн. Лучше использовать Card Layout , который был разработан для этой цели.

Почти каждый дочерний элемент JComponent, который я использую, переписал свой paintComponent с пользовательскими фонами изображений и сглаживанием, где это применимо

Тогда, возможно, у вас проблемы с вашей заказной картиной. Что происходит, когда вы просто используете стандартные компоненты без специальной окраски?

...