Java скрыть изображения

#java #image #timer #hide

#java #изображение #таймер #скрыть

Вопрос:

Я пытаюсь создать простую программу, которая показывает, что позволяет изображению перемещаться по экрану. Теперь iv’e удалось создать изображение для перехода слева направо, но теперь у меня на экране около 20 изображений.

Что мне нужно получить, так это то, что при печати следующего изображения предыдущее изображение будет скрыто. Также, если бы кто-нибудь мог помочь мне с печатью с помощью таймера, это было бы здорово.

Вот мой код

 package imagemove;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class imagemove extends Component {
    private int x;
    private int y;

    BufferedImage img;

    public imagemove() {
       try {
           img = ImageIO.read(new File("F:/JAVA/workspace/Tutorials/src/imagemove/1.jpg"));
       } catch (IOException e) {
       } 

    }


    public void paint(Graphics g) {
        x = 0;
        y = 50;

        for (int number = 1; number <= 15; number  ) {
            g.drawImage(img, x, y, this);
            if (x > 1000) {
                x = 0;
            } else {
                x  = 100;
            }   

            if(y > 100) {
                y -= 100;
            } else {
                y  = 25;
            }
            repaint();
        }
    }


    public static void main(String[] args) { 
        JFrame f = new JFrame("Boot");   
        f.setSize(1000,1000);
        f.add(new imagemove());        
        f.setVisible(true);
    }
}
  

Ответ №1:

  1. вы должны поместить свой цикл for в другой метод, который вызывается из метода main . (очевидно, что инструкция рисования изображения должна оставаться в методе рисования)
  2. используйте paintComponent вместо paint
  3. поместите super.paintComponent(g) в качестве первой строки в paintComponent(). и ваши предыдущие изображения должны быть очищены

Редактировать:

расширить JComponent вместо Component . Компонент — AWT, JComponent — Swing

Ответ №2:

Это работает таким образом; он протестировал это:

 public class imagemove extends Component {
    private int x;
    private int y;


    BufferedImage img;

    public imagemove() {
       try {
           img = ImageIO.read(new File("F:/JAVA/workspace/Tutorials/src/imagemove/1.jpg"));
       } catch (IOException e) {
       } 

       x = 0;
       y = 50;
    }


    @Override
    public void paint(Graphics g) {
        g.drawImage(img, x, y, this);
        if (x > 1000) {
            x = 0;
        } else {
            x  = 100;
        }   

    if(y > 100) {
        y -= 100;
    } else {
        y  = 25;
    }
}


public static void main(String[] args) { 
    JFrame f = new JFrame("Boot");   
    f.setSize(1000,1000);
    f.add(new imagemove());        
    f.setVisible(true);

    for (int number = 1; number <= 15; number  ) {
        f.repaint();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {}
    }
}
  

}

Комментарии:

1. зачем this быть ImageObserver для BufferedImage?

2. paint() не должен изменять состояние компонента. Обновление x и y должно выполняться в другом месте

Ответ №3:

Вы не можете вызвать repaint из метода paint().