Как реализовать поток для класса JPanel, чтобы у меня двигались много картинок одновременно - Java

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

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

как реализовать поток для класса JPanel, чтобы у меня двигались много картинок одновременно? Я долго думал, не получаеться.Помогите.Вот мой код:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.Timer;
import java.awt.Dimension;
import java.awt.Graphics;
 
import javax.swing.JFrame;

public class Main  {
 
    public static void main(String[] args) {
        int width = 800;
        int height  = 600;
        
        MyFrame frame = new MyFrame(width, height);

    }

}
 
public class MyFrame extends JFrame  {
    
    Dimension dimension = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    
    public MyFrame(int width,int height){

        int x = dimension.width/2-(width/2);
        int y = dimension.width/2-(height/2);
        setBounds(x, y, width, height);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        MyPanel panel = new MyPanel("src/index1.png",100);
        add(panel);
        panel.setBounds(0, 0, width, height);
    }

}
public class MyPanel extends JPanel {
 
    Image img = null;
    
    int x = 0;

    public MyPanel(String imageName,int t) {
        try {
            img = ImageIO.read((new File(imageName)));
        } catch (IOException e) {
        }
 
        Timer time = new Timer(t, new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                repaint();
 
            }
        });
        time.start();
 
    }
 
    public void paintComponent(Graphics graphics) {
 
        graphics.drawImage(img, x, 80, null);
 
        x = x + 10;
        if (x > 800) {
            x = 0;
        }
    }

}

Решение задачи: «Как реализовать поток для класса JPanel, чтобы у меня двигались много картинок одновременно»

textual
Листинг программы
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
 
public class Speed
{
    public JFrame window = new JFrame();
    
    
    public Speed()
    {
        makeWindow();
    }
 
    
    private void makeWindow()
    {
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(800, 600));
        panel.setOpaque(false);
        
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().setBackground(Color.black);
        window.setResizable(false);
        window.add(panel);
        window.pack();
        window.setLayout(null);
        window.setLocationRelativeTo(null);
        window.setVisible(true);
        
        for (int i = 0; i < 5; i++)
        {
            window.add(new BaseEnemy());
        }
    }
    
    
    public class BaseEnemy extends JLabel
    {   
        private static final long serialVersionUID = 1L;
        int[] mirror = {1, -1};
        int m = mirror[new Random().nextInt(mirror.length)];
        int x = new Random().nextInt(700 - 100) + 100;
        int y = new Random().nextInt(500 - 100) + 100;
 
        
        public BaseEnemy()
        {       
            setBounds(x, y, 100, 100);
            
            Thread worker = new Thread()
            {  
                public void run()
                {   
                    while (true)
                    {
                        try
                        {
                            Thread.sleep(15);
                        
                            y += m;
                            x++;
                            setLocation(x, y);
                        }
                        catch (Exception e)
                        {
                            //...
                        }   
                    }
                }
            };
            worker.start();
        }
   
 
        public void paintComponent(Graphics g)
        {   
            ImageIcon icon = new ImageIcon(getClass().getResource("/res/pic.png"));
            Image img = icon.getImage(); 
            
            g.drawImage(img, 0, 0, null);
            g.dispose();
        }
    }
    
    
    public static void main(String[] args)
    {
        new Speed();
    }
}

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


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

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

10   голосов , оценка 3.9 из 5
Похожие ответы