java – 为什么getSize()在这里不能为我工作以及为什么在调整大小时闪烁?
作者:互联网
这是我第一次尝试使用BufferStrategy,我真的很感激一些提示.
1)为什么在下面的代码中,getSize()在调整窗口大小之前返回0的维度?如何立即检测窗口的大小?
2)为什么getSize()返回的东西不是窗口的完整尺寸? IE为什么底部和右边都有一条黑色条带?
3)调整窗口大小时有没有办法摆脱闪烁?
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BSTest extends JFrame {
BufferStrategy bs;
DrawPanel panel = new DrawPanel();
public BSTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800,420);
setLocationRelativeTo(null);
setIgnoreRepaint(true);
setVisible(true);
createBufferStrategy(2);
bs = getBufferStrategy();
panel.setIgnoreRepaint(true);
add(panel);
panel.drawStuff();
}
public class DrawPanel extends JPanel {
public void drawStuff() {
while(true) {
try {
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
g.setColor(Color.BLACK);
System.out.println("W:"+getSize().width+", H:"+getSize().height);
g.fillRect(0,0,getSize().width,getSize().height);
bs.show();
g.dispose();
Thread.sleep(20);
} catch (Exception e) { System.exit(0); }
}
}
}
public static void main(String[] args) {
BSTest bst = new BSTest();
}
}
解决方法:
>在调用validate()之前,JPanel的大小无效,通常是在包含Window上调用pack().
>最终尺寸是多种因素的综合结果,包括封闭组件的首选尺寸和特定外观和尺寸的面板UI代表.感觉.
>默认情况下,JPanel是双缓冲的;无需进一步努力. AnimationTest
就是一个例子.
标签:java,swing,doublebuffered 来源: https://codeday.me/bug/20190621/1250947.html