2013-02-23 53 views
0

我有一个简单的事情,我正在用Java进行测试。Java JFrame setSize诱发滞后

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位的注释时,线条绘制比没有绘制更为复杂......这对我来说没有多大意义?问题是什么?

+7

对于同一个任务,你应该实现一个'MouseMotionListener',它比在无限循环中轮询更有效率。 – 2013-02-23 16:24:43

+0

哎呀,还有那个! – 2013-02-23 16:25:46

+4

永远不要通过getGraphics()在组件上获得图形(除非在特殊情况下,例如打印或需要在BufferedImage上绘制组件)。教程将告诉你最好的方法来做到这一点。 – 2013-02-23 16:26:19

回答

2

LinePanel是一些有关您的问题的有用评论中提出的方法的示例。该示例包含键绑定,因此您可能需要专注于更早,更简单的revision