用JFrame表示出画面D后,按下Alt+Tab切换到其他画面,然后再切换回来时,画面D成为一片空白了(白屏)。
这是我第一次用Swing来做UI,就遇到了这个问题。请大家帮我分析一下原因。谢谢下面是部分相关的程序
    timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
repaintFullScreen();
}
}, 2000);    
public void repaintFullScreen() {
// strategy BufferStrategy:Double(bufferSize=2)
for (int i = 0; i < bufferSize; i++) {
if (!strategy.contentsLost()) {
gbb = strategy.getDrawGraphics();
paintFullScreen(gbb);
strategy.show();
gbb.dispose();
}
}
}

解决方案 »

  1.   

    在切换到其它页面后又回来,程序会自动调用repaint()函数,并根据当前的Graphics来绘制,要想回来的时候不成白的,可以想个办法把切换前的Graphics保存下来,或在它激活事件里自己调用一下repaint(Graphics g)一下.
      

  2.   

    谢谢yuyu622
    现在我的做法基本上和你的想法差不多:开始保存了Graphics,然后再表示。
    保存的部分:
             createBufferStrategy(bufferSize); //ダブルバッファリング
             strategy = getBufferStrategy();
    再表示的时候就是最开始贴的那段程序repaintFullScreen,也试过在windowActivated中调用过了,
    还是不好使。
    repaintFullScreen中有这么一句:paintFullScreen(gbb); 
    paintFullScreen是这么写的:
        public void paintFullScreen(Graphics g){
            pnlBackground.paintAll(g); // pnlBackground是表示页面的Background Panel
        }
      

  3.   

    再顶一下
    怎么保存Graphics,能稍微说明一下吗,
    其他的我再自个试试
      

  4.   

    可以试试用BufferStrategy
    不过我也不太清楚
    还是自己查资料找找吧,在这里问,解决不了实际问题的。
      

  5.   

    先validate(),再repaint()
    -------------------------------------结合我要做的这部分程序,
    是在repaintFullScreen()之前使用validate()吗?
    你说的是Component的validate()吗
      

  6.   

    问题解决了。在子类里发现一句隐藏得很深的一句话:
    setIgnoreRepaint(true);
    就是它,无视了OS的再描画要求。代码不是我写的。我也是才接手这团乱糟糟的东西。谢谢回复。