如何以客户端监视器的最大刷新率为JPanel设置动画?
我希望发生的是paintComponent
仅在上次更新后调用。我可以通过使用Timer
每隔(1000/60)ms安排repaint()
来做到这一点,但我只是猜测刷新率是多少。
实际上,我希望repaint
能够被连续调用。但是,如果我每秒调用repaint
200次并且EDT不忙,则每秒执行paintComponent
200次,这对处理器时间的使用效率低,并且可能会对应用程序的其余性能产生负面影响
答案 0 :(得分:2)
我不确定重新调整显示器的刷新率是一个好主意。但是如果你想找出刷新率是什么,你可以使用这段代码(从互联网上无耻地复制)。
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
for (int i = 0; i < gs.length; i++) {
DisplayMode dm = gs[i].getDisplayMode();
// Get refresh rate in Hz
int refreshRate = dm.getRefreshRate();
if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {
// Unknown rate
} else {
System.out.println(refreshRate);
}
}
答案 1 :(得分:1)
我同意@little bunny foo foo
你必须用OS Latency计算,这个值取决于HW&amp; SW,然后我的WinXp的值大约为63ms,通过锁定此频率,您从RepaintManager获得错误,例如JTable是非常敏感的JComponents,请阅读有关Swing paintImmediately()中的绘画的更多信息,重绘()通过defalut创建EDT
编辑:吹走所有关于重绘()的疑虑;看这里painting and javax.swing.Timer