2013-02-23 30 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