Как реализовать поток для класса 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д