Вкладки Canvas3D перестают правильно отображаться при удалении вкладки из JTabbedPane

Я работаю над графическим интерфейсом, который использует Java3D для предварительного просмотра 3D-моделей. У меня есть JTabbedPane, в котором каждая вкладка представляет собой Canvas3D, что позволяет загружать несколько предварительных просмотров и переключаться между ними. Это работало нормально, пока я не добавил функциональность для удаления вкладок. При удалении вкладки в большинстве случаев оставшиеся вкладки перестают отображать 3D-модели, хотя редко они продолжают работать должным образом. Не существует очевидного набора условий, которые могли бы определить, когда вкладки будут продолжать работать, а когда нет. Однако загрузка нового предварительного просмотра вернет к жизни все остальные вкладки.

Что я пробовал:

  • Вызов проверки на JTabbedPane
  • Вызов недействительного на JTabbedPane, а затем проверка
  • Вызов недействительности/валидации на новой выбранной в данный момент вкладке Canvas3D
  • Вызов repaint() для Canvas3D, JTabbedPane и т. д.
  • Вызов stopView() startView() для объекта View, прикрепленного к Canvas3D

Вызов isViewRunning() возвращает true, даже если кажется, что это не так, поэтому, возможно, я ищу совершенно не то место для этой проблемы. Любые мысли по этому поводу будут очень признательны.


person user34212    schedule 03.07.2012    source источник
comment
чтобы получить более подробную информацию, опубликуйте SSCCE.   -  person mKorbel    schedule 04.07.2012
comment
Фраза в большинстве случаев может вызвать проверку правильная синхронизация.   -  person trashgod    schedule 04.07.2012
comment
@mKorbel Спасибо за совет. Казалось, что составление SSCCE для этого займет больше времени, чем оно того стоит. Просто надеялся, что кто-то сталкивался с похожей проблемой.   -  person user34212    schedule 06.07.2012
comment
@trashgod Спасибо, я изучаю это. Похоже, это может быть многообещающая зацепка.   -  person user34212    schedule 06.07.2012


Ответы (1)


Вкладки Canvas3D отображаются правильно при запуске моего приложения на 6u33 или 7u5 (Win 7 64). В «прежние времена», следуя подсказке обходного пути, я вызывал проверку для компонента верхнего уровня (обычно JFrame) в ChangeListener JTabbedPane, когда вкладка была удалена.

person InteractiveMesh    schedule 05.07.2012
comment
Большое спасибо за помощь. Обходной путь позволил ему работать во всех случаях, кроме, как ни странно, случая, когда я удаляю последнюю вкладку. Удаление чего-либо еще работает идеально, как и предполагалось. - person user34212; 06.07.2012