У меня есть Java JApplet, встроенный в веб-страницу.
Окно JApplet содержит единственный экземпляр класса, который расширяет JPanel - того же размера, что и JApplet.
Апплет может вызывать всплывающие окна (JFrames), когда пользователь нажимает кнопку на панели.
Каждый раз, когда я нажимаю на кнопку, чтобы открыть окно, мой апплет мерцает, когда перерисовывается. Он также делает то же самое, когда я нажимаю на него снова или когда у него есть фокус, и я нажимаю на другое окно - мой вывод: это перерисовка, которая вызывается событиями focusLost () и focusGained ().
Я реализую двойную буферизацию в методе paint () панели следующим образом:
@Override
public void paint(Graphics g)
{
if(resized)
{
offscreen = createImage(getWidth(),getHeight());
resized = false;
}
Graphics offscreenG = offscreen.getGraphics();
/// DRAW HERE:
// paint the main window contents:
view.paint(offscreenG);
// paint the child components of our panel.
super.paint(offscreenG);
/// FRAW FINISHED
g.drawImage(offscreen,0,0,this);
offscreenG.dispose();
}
Объект представления не является компонентом Swing, а просто классом, который умеет рисовать все на объекте Graphics.
Метод paint () в JApplet не переопределяется.
Возможно, я мог бы переопределить методы focusGained / focusLost моего JApplet, чтобы предотвратить перерисовку, но я бы лучше услышал лучшее решение проблемы.