作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是我第一次尝试使用 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
的大小是无效的,通常是调用 pack()
在包含 Window
上。
最终大小是多种因素组合的结果,包括封闭组件的首选大小和特定外观的面板 UI 代表。
JPanel
默认是双缓冲的;不需要进一步的努力。 AnimationTest
就是一个例子。
关于java - 为什么 getSize() 在这里对我不起作用,为什么调整大小时会闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441328/
我创建了一个分支来开发新功能。由于这个新功能完全是作为一个新项目开发的,唯一可能的冲突来源是解决方案文件。 随着功能的开发,主分支更新了几次。当我完成开发和测试时,我做了: git checkout
我是一名优秀的程序员,十分优秀!