Форум программистов, компьютерный форум, киберфорум
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 25.02.2018
Сообщений: 12
1

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

13.05.2018, 10:58. Показов 615. Ответов 6
Метки нет (Все метки)

как реализовать поток для класса JPanel, чтобы у меня двигались много картинок одновременно?
Я долго думал, не получаеться.Помогите.Вот мой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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;
        }
    }
 
 
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2018, 10:58
Ответы с готовыми решениями:

Как правильно задать размер JPanel чтобы JFrame при pack() сжимался до размеров JPanel
Подскажите как правильно задать размер JPanel чтобы JFrame при pack() сжимался до размеров JPanel,...

Может ли обьект класса В тоже войти одновременно в synchronized, но уже из другого поток
Добрый день ! В классе А есть обьекты другого класса В. Если обьект класса А вошел в блок...

Как реализовать, чтобы главный поток ждал, пока завершат свою роботу другие потоки
Всем доброго времени суток. Есть следующий код, как реализовать чтоб главный поток подождал пока...

Как построить класс так чтобы при изменении одного из свойств, класса создавался новый поток?
Добрый всем день. Помогите разобраться с задачей. Задача: Создайте класс Bank в котором...

6
255 / 232 / 185
Регистрация: 02.04.2016
Сообщений: 898
15.05.2018, 19:02 2
посмотрите в сторону ExecutorService
0
288 / 142 / 66
Регистрация: 22.02.2017
Сообщений: 584
16.05.2018, 15:44 3
И что там можно увидеть глядя на ExecutorService ?
это ведь не поток а механизм управления потоками точнее их очередности и так тому подобное по выполнению задачи дробя ее на под задачи под каждый поток в заданный в Executor.
Если скажем десять картинок по экрану гонять что будет делать полезного ExecutorService ?

Добавлено через 57 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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();
    }
}
0
255 / 232 / 185
Регистрация: 02.04.2016
Сообщений: 898
16.05.2018, 18:25 4
Nidl, удобно управлять движением в разных потоках
0
288 / 142 / 66
Регистрация: 22.02.2017
Сообщений: 584
16.05.2018, 18:59 5
пожалуйста можете пояснить вашу мысль ?
0
255 / 232 / 185
Регистрация: 02.04.2016
Сообщений: 898
17.05.2018, 01:32 6
Nidl, если я как-то хочу проверять исполнение задач в зависимости от разных ситуаций, например в ActionListner, то удобно будет использовать Future<?>, а Executor просто удобно сынкапсулирует Callable<?>. Может я усложняю?)
0
288 / 142 / 66
Регистрация: 22.02.2017
Сообщений: 584
17.05.2018, 14:41 7
но к данному случаю как это поможет ? ведь картинки планируются двигаться бесконечно и отслеживать завершение потоков не нужно.

Или если у нас звездное небо, там ведь не нужно отслеживать потоки, все же зациклено до поры когда надо все разом остановить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2018, 14:41

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как сделать так, чтобы 2 окна двигались синхронно при перетягивании главного?
Есть два окошка, Form1 и Form2. Мне нужно, чтобы при перемещении первого перемещалось и второе?

Как сделать блок шире при наведении, чтобы не двигались остальные элементы?
Как это называется? Я добавил #id:hover { z-index: 500; } - это не работает

Как изменить скорость движения одного шара, чтобы спутники двигались с разными скоростями и сталкивались
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Как реализовать для каждого объекта свой поток
Господа помогите плиииЗ ... как сделать для каждого объекта свой поток??? тут я сделал так...

Как реализовать галерею картинок для шаблона на ebay.com
Всем привет ! Я продаю всякую мелочь на ebay.com и для своих страничек (лислингов) я делаю...

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны
Суть проблемы: Создаю приложение по sql. При создании формы с датагридом и пр. отдельным потоком...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.