我有一個嵌入在網頁中的Java JApplet。 JApplet窗口包含擴展JPanel的類的單個實例 - 與JApplet的大小相同。 當用戶單擊面板中的按鈕時,小應用程序可以產生彈出窗口(JFrames)。Java小應用程序閃爍焦點丟失和焦點已着色
每當我點擊一個按鈕彈出一個窗口,我的小程序會重新繪製時閃爍。當我再次點擊它或者它有焦點時,它也會做同樣的事情,我點擊不同的窗口 - 我的結論是:重繪是強制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組件,但只是一類,它知道熱繪製的一切到一個圖形對象。
JApplet的paint()方法未被覆蓋。
我可能會重寫我的JApplet的focusGained/focusLost方法以防止重新繪製 - 但我寧願聽到更好的解決方案。
謝謝 - 非常有幫助! – Warlax