Перерисовать картинку - Java

Узнай цену своей работы

Формулировка задачи:

У меня есть форма (jFrame). Можно ли без добавления jPanel перерисовывать картинку?
public class MainForm extends JFrame {
public MainForm() throws HeadlessException {
//инициализация формы;
}
 
    Image fish =  ImageIO.read(new File("C:\\...\\fish.png"));
 
    public void go() {
        final TimerTask task = new TimerTask() {
            public void run() {
               Graphics g = getGraphics();
 
              int x = getMyX();// random x 
                int y = getMyY();// random y
 
                    synchronized (this){
 
                       g.drawImage(fish,x,y,null);
                   }
 
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
repaint(); // ничего не перерисовывает
 
            }
        };
        timer = new Timer();
        timer.schedule(task, 0, DELAY);
    }
}
Форма загромождается картинками. С прямоугольниками например все работает хорошо
  g.drawRect(x,y,20,20);
 
                    Thread.sleep(100);
              
          g.clearRect(x,y,20,20);
repaint();
Есть ли похожий метод для перерисовки картинок на jFrame? Или единственный выход создание дополнительного комп-а jPanel?
Может я не в том направлении копаю?) Задача: аквариум, динамические (двигающиеся картинки) + статические. Изменение х-к со временем. Как лучше всего реализовать? Какие компоненты + ф-ции использовать?

Решение задачи: «Перерисовать картинку»

textual
Листинг программы
class MyPanel extends JPanel {
    private final Random r = new Random();
 
    MyPanel() {
        setLocation(40, 30);
        setSize(100, 100);
        setBackground(Color.BLACK);
 
        new Timer(50, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                repaint();
            }
        }).start();
    }
 
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
        g.fillRect(0,0,100,100);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5