【问题标题】:Java JFrame setSize induces lagJava JFrame setSize 导致滞后
【发布时间】: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


【解决方案1】:

LinePanel 是关于您的问题的几个有用的 cmets 中建议的方法的一个示例。该示例包含键绑定,因此您可能希望关注更早、更简单的revision

【讨论】:

    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多