用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();
}
}
}
这是我第一次用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();
}
}
}
现在我的做法基本上和你的想法差不多:开始保存了Graphics,然后再表示。
保存的部分:
createBufferStrategy(bufferSize); //ダブルバッファリング
strategy = getBufferStrategy();
再表示的时候就是最开始贴的那段程序repaintFullScreen,也试过在windowActivated中调用过了,
还是不好使。
repaintFullScreen中有这么一句:paintFullScreen(gbb);
paintFullScreen是这么写的:
public void paintFullScreen(Graphics g){
pnlBackground.paintAll(g); // pnlBackground是表示页面的Background Panel
}
怎么保存Graphics,能稍微说明一下吗,
其他的我再自个试试
不过我也不太清楚
还是自己查资料找找吧,在这里问,解决不了实际问题的。
-------------------------------------结合我要做的这部分程序,
是在repaintFullScreen()之前使用validate()吗?
你说的是Component的validate()吗
setIgnoreRepaint(true);
就是它,无视了OS的再描画要求。代码不是我写的。我也是才接手这团乱糟糟的东西。谢谢回复。