2015-02-26 1 views
0

У меня есть JPanel v. Функция ниже создает полноэкранный Jframe, называемый окном, в котором будет представлен этот JPanel. У меня есть:Undecorated full-screen JFrame, показывающий JPanel, не перерисовывается до тех пор, пока Alt-tab

protected final void fullScreenMulti(final JPanel v) { 
    final JFrame window= new JFrame(); 
    window.setUndecorated(true); 
    window.add(v); 
    //window.setVisible(true); 
    . 
    . 
    . 
    window.validate(); 
    window.repaint(); 
    GraphicsDevice gdev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
    gdev.setFullScreenWindow(window); 

    DisplayMode mode = gdev.getDisplayMode(); 
    window.setSize(mode.getWidth(), mode.getHeight()); 
} 

Это работает для рендеринга по умолчанию, который написан для кода. Однако, выбрав GL-рендеринг, который использует JOGL, делает полноэкранный кадр пустым, и я получаю белый экран. Вам нужно будет включить и выключить вкладку или нажать «Пуск», чтобы панель была раскрашена. Я попытался изменить фон из окна с помощью:

Container c = window.getContentPane(); 
c.setBackground(Color.yellow); 

, что ничего не делает, хотя и я все еще получаю белый экран. (Хотя, когда я отлаживаю, я вижу, что свойство фона успешно применяется.)

Также нажмите на пустую область второго экрана (окно размещено на первом экране) или даже нажатие кнопки «Пуск», SOMETIMES делает кадр черным, а мой адаптер мыши не работает после этого. (что конкретно может случиться здесь, как я могу его исследовать?) В других случаях он имеет тот же эффект от Alt-tab.

Не сделали много вещей Swing на Java и я немного потерян. Увидев, что он работает нормально на одном рендерере, а не на другом, предполагает, что он имеет какое-то отношение к средству визуализации GL, но рендеринг отлично работает при рендеринге JPanels в моем не полноэкранном режиме; Также я понимаю, что роль рендеринга заключается в том, чтобы просто буферизовать видео, которое показано на моем JPanel. (Я имею в виду, что это делают визуализаторы, верно?), Поэтому, вероятно, это случай, когда некоторые настройки не указаны выше, но оригинальный рендерер позаботится об этом. Какие-нибудь предложения, что это может быть?

Редактирование: само собой разумеется, извлечение window.add (v) сделает рендеринг кадра прекрасным, а результат изменения фона кадра и т. Д., Который ранее не работал, теперь будет виден на кадре.

+0

Для получения более подробной помощи отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short , Self Contained, Правильный пример). –

+0

Спасибо, но это масштабный проект. Я добавил бит, который, как мне показалось, был уместным. Я жду первоначального диагноза для подачи других бит. это не то, что вы должны делать? –

+0

* «Я добавил бит, который, как мне показалось, релевантным» * Докажите, что это актуально, вызвав его из 'main (String [)', чтобы показать проблему на экране. В противном случае я (и, возможно, другие) скептически отношусь к вашему анализу, что отображается соответствующий код *. –

ответ

Смежные вопросы