【发布时间】:2013-02-23 16:21:40
【问题描述】:
我正在用 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 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()获取组件上的图形(除非在非常特殊的情况下,例如打印或如果您需要在 BufferedImage 上绘制组件)。这些教程将向您展示执行此操作的最佳方法。 -
不要打电话给
setSize()。而是覆盖 JComponent 派生对象的getPreferredSize()并在 JFrame 上调用pack()。 -
1.并且永远不要使用图形 g = jf.getGraphics();, 2. 黑暗中的好镜头,不是真正的问题,3. rest is in my answer here
-
@SuperDisk:不,换个角度想:你正在学习做正确的事。 :)
标签: java swing graphics jframe frame-rate