Java JFrame setSize会导致延迟
我有一个简单的东西,我正在用Java进行测试Java JFrame setSize会导致延迟,java,swing,graphics,jframe,frame-rate,Java,Swing,Graphics,Jframe,Frame Rate,我有一个简单的东西,我正在用Java进行测试 package us.superdisk.Teststs; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.MouseInfo; import java.awt.PointerInfo; import javax.swing.*; public class Main { public sta
package us.superdisk.Teststs;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import javax.swing.*;
public class Main
{
public static void main(String[] argv) {
JFrame jf = new JFrame("test");
jf.setVisible(true);
//jf.setSize(new Dimension(512, 512));
Graphics g = jf.getGraphics();
PointerInfo a;
while (true) {
a = MouseInfo.getPointerInfo();
g.drawLine(0, 50, (int)a.getLocation().getX(), (int)a.getLocation().getY());
}
}
}
这将向鼠标光标绘制一条线
创建时,窗口非常小且不可见,您必须调整其大小才能看到线条。然而,线条画是流畅的
当您取消注释
setSize
位时,线条绘制要比未注释时慢得多。。。这对我来说没什么意义?问题是什么?是关于您的问题的几条有用评论中建议的方法的一个例子。该示例包括键绑定,因此您可能希望将重点放在更早、更简单的方法上。对于同一任务,您应该实现MouseMotionListener
,这将比无限循环中的轮询效率更高。而且决不能通过getGraphics()
(除非是在非常特殊的情况下,例如打印或需要在BuffereImage上绘制组件)。教程将向您展示执行此操作的最佳方法。不要对任何对象调用setSize()
。而是重写JComponent派生对象的getPreferredSize()
,并调用pack()
在JFrame上。1.永远不要使用图形g=jf.getGraphics();,2.很好地解决了这个问题,不是真正的问题,3.@SuperDisk:不,换个角度考虑:你正在学习如何正确地做事。:)