Canvas конфликтует с прозрачностью панели. Помогите!

0
21 авг 2016 18:33
Наткнулся на странное место и не могу понять, почему так. Все раньше получалось, но здесь.. Я решил, так же, как и в игре, в интерфейсе, сделать главное меню в несколько слоев, на заднем крутить openGL-картинки, а выше панели с кнопками, выдвигающиеся.

И все получается, но.. ни одна панель не может согласоваться с openGL на заднем плане! Какого.. что не так с этим ГЛ?!

ВОТ ПАНЕЛЬ, КУДА Я ВЕШАЮ КАНВАС С "ВИДЕО", она прикрепляется на САМЫЙ НИЖНИЙ СЛОЙ фрейма меню:

 centerPanel.add(upTextedPanel, BorderLayout.NORTH);
	centerPanel.add(canvas, BorderLayout.CENTER);
	centerPanel.add(downTextedPanel, BorderLayout.SOUTH);
	
	getLayeredPane().add(centerPanel, new Integer(0));
	getLayeredPane().add(upPanel, new Integer(1));
	addWindowStateListener(wsl);
	addComponentListener(cad);
	addKeyListener(this);
	setVisible(true);
	
	logoAnimator = new FPSAnimator(canvas, 60, true);
	logoAnimator.start();


А ВОТ СЛЕДОМ ЗА НИМ ИДЕТ upPanel, КОТОРАЯ СОДЕРЖИТ ДВЕ ПАНЕЛЬКИ, С ПРОЗРАЧНЫМ ФОНОМ, РИСУЮТСЯ ЧЕРЕЗ paintComponent-ы свои каждая и кладутся на панель upPanel по западу и востоку. У ВСЕГО setOpaque(false)! У всех панелей.

-------------------------------------

ИТАК: Я запускаю игру и что же я вижу?! Вот что:



Кажется, что ничего не вышло и ГЛ не запустился, но стоит отодвинуть верхнюю upPanel в сторону - сразу ясно, что все рисуется, а вот почему-то толку от этого нет. Хотя, повторюсь, upPanel setOpaque(false). Я даже пытался сделать ей setBackground(new Color(0,0,0,0)) - бестолку!





Так что же еще мне сделать, чтобы панели 1 слоя были НАД канвасом нулевого слоя? И Канвас был виден сквозь "прозрачную" upPanel? -_-"

Ответов: 2

1
22 авг 2016 19:54
Проблема известная. Простого решения нет. Вариант через недокументированное API приведен в статье по ссылке. Но если даже он еще работает, то может перестать в любой момент.

Minecraft и прочие 3d приложения обычно swing не используют и делают отрисовку всего интерфейса через OpenGL.
0
03 сен 2016 23:05
Что ж, очевидно, пока что решения нет.. Буду переделывать в обход. Надеюсь, разработчики Java все же имеют цель создать в итоге полноценный язык программирования, где не будет таких слабых мест.
Модераторы: Нет
Сейчас эту тему просматривают: Нет