Java.drawImage : How do I "unDraw" or delete a image?

标签 java image swing graphics2d paintcomponent

我需要在程序运行时不断地在不同位置重绘某个图像。所以我设置了一个 while 循环,它应该在屏幕上移动图像,但它只是一遍又一遍地重绘图像。我究竟做错了什么?有没有办法在将旧图像绘制到新位置之前将其删除?

        JFrame frame = buildFrame();

    final BufferedImage image = ImageIO.read(new File("BeachRoad_double_size.png"));

    JPanel pane = new JPanel() {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            int num = 0;
            boolean fluff = true;
            while (fluff == true) {
            num = num + 1;
            g.drawImage(image, num, 0, null);
            if (num == 105) {
                fluff = false;
            }
            }
        }
    };


    frame.add(pane);

最佳答案

您不能在 paintComponent() 方法中编写循环代码。代码将执行得如此之快,以至于图像只会绘制在最终位置,在您的情况下,x 位置应为 105。

相反,您需要使用 Swing Timer 每隔 100 毫秒左右安排一次动画。然后当计时器触发时,您更新 x 位置并在面板上调用 repaint() 。阅读 Using Swing Timers 上的 Swing 教程了解更多信息。

关于Java.drawImage : How do I "unDraw" or delete a image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867537/

相关文章:

html - 响应图像问题

css - Symfony2 AvalancheImagineBundle/调整图像大小

java - 向文本区域添加滚动条

Java Swing 日历或组织器

java - JOptionPane : Display button "Ok" after a certain amount of time

java - 哪些版本的 Kotlin 与哪些版本的 JDK 兼容?

java - MyBatis: boolean 参数:MyBatis 正在使用 Getter

java - Andengine Sprite 数组错误

java - StringTokenizer delimit 一次

android - AsyncTask 加载图片 RecyclerView