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

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

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

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

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

textual
Листинг программы
  1. class MyPanel extends JPanel {
  2.     private final Random r = new Random();
  3.  
  4.     MyPanel() {
  5.         setLocation(40, 30);
  6.         setSize(100, 100);
  7.         setBackground(Color.BLACK);
  8.  
  9.         new Timer(50, new ActionListener() {
  10.             @Override
  11.             public void actionPerformed(ActionEvent e) {
  12.                 repaint();
  13.             }
  14.         }).start();
  15.     }
  16.  
  17.     @Override
  18.     public void paintComponent(Graphics g) {
  19.         super.paintComponents(g);
  20.         g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
  21.         g.fillRect(0,0,100,100);
  22.     }
  23. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут