java - 2D 动画未显示面板

标签 java animation 2d

我试图用Java创建面板上移动线的2D动画(一条从面板中的一个点移动到另一个点的线)。我希望这是可能的。这是我使用的代码。

private void movingline(int length) throws InterruptedException {
        for(int i = 0; i + length < width; i++){
            for(int j = 0; j + length < height; j++){
                 eraseline(); 
                 drawLine(Color.cyan, i, j, i+length, j+length);
                 erase = true;
            }
        }
    }

    private void eraseline() {
        if(erase){
            fillCanvas(Color.BLUE);
        }
    }

运行代码时,面板不显示。

这是画线的代码。

 public void drawLine(Color c, int x1, int y1, int x2, int y2) {
        int pix = c.getRGB();
        int dx = x2 - x1;
        int dy = y2 - y1;
        canvas.setRGB(x1, y1, pix);
        if (dx != 0) {
            float m = (float) dy / (float) dx;
            float b = y1 - m*x1;
            dx = (x2 > x1) ? 1 : -1;
            while (x1 != x2) {
                x1 += dx;
                y1 = Math.round(m*x1 + b);
                canvas.setRGB(x1, y1, pix);
            }
        }
        repaint();
    }

运行代码时,面板不会显示移动线。任何帮助将非常感激。

最佳答案

我认为最大的问题是您试图从(我猜测)不是事件调度线程的线程更改 GUI 的外观。

解决方案是将 Activity (具体来说,对 eraseLinedrawLine 的调用)包装在 Runnable 中。并使用 SwingUtilities.invokeAndWait() 调用 Runnable .

<小时/>

编辑:Java 的图形组件并不能真正让您自己操作 Canvas 。只有组件本身才进行绘制,并且只有在被要求绘制自身时才进行绘制。直接在 Canvas 上绘图,即使您可以让它工作,效果也会很差,因为您会干扰组件的工作。

我没有进行更多解释,而是实现了我认为“正确”的方法。

http://pastebin.com/etfmKbjj

代码在必要的地方进行了注释,我希望它能给你一些想法。有关更多背景知识,请阅读 Swing 上的官方教程和Graphics .

关于java - 2D 动画未显示面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328288/

相关文章:

java - Spring 3.1 和 Servlet API 3.0。 @WebServlet 注解的使用方法

java - 在 REST 服务中实现方法 OPTIONS 的最佳方式

java - 使用正则表达式屏蔽 Java 中的最后 4 位数字

java - 在 ConcurrentHashMap 中修改值的首选方法是什么?

javascript - 使用 jQuery 动画宽度时出现奇怪的 "shaking"效果(仅在 Chrome 中!)

c# - 在 StackPanel 中为子级设置动画 - WPF (C#)

iPhone设置了一些时间延迟

java - 带位图的高效onDraw和硬件加速的复杂裁剪

c++ - 2D 平台碰撞处理

c# - Unity 在没有 IsTrigger 的情况下使用 OnCollisionEnter2D 检测碰撞