주어진 수의 아이콘이 프레임의 왼쪽에서 시작하여 화면의 오른쪽으로 이동하는 애니메이션을 만들려고합니다. 아이콘은 세로로 나열되어 있으며 각 아이콘은 자체 스레드에서 실행됩니다.개별 스레드의 아이콘이 함께 화면을 이동하도록 멀티 스레딩을 올바르게 수행하는 방법은 무엇입니까?
모든 아이콘을 어떻게 얻습니까? 나는 각 레이서를 만들 때 posY
을 조정하려했지만, 지금까지는 내가 만든 레이서 만 보여줄 수있다.
import javax.swing.*;
import java.awt.*;
public class Races {
private JFrame frame;
private JPanel gui;
private Icon img;
private int imgWidth;
private int imgHeight;
private int numOfRacers; // num of threads/racers
public static void main(String[] args) {
new Races(5);
}
public Races(int num) {
numOfRacers = num;
createGUI();
frame.add(gui);
frame.pack();
frame.setVisible(true);
}
private void createGUI() {
frame = new JFrame("Off to the Races - by Brienna Herold");
gui = new JPanel();
gui.setPreferredSize(new Dimension(imgWidth * 20, imgHeight * numOfRacers));
img = new ImageIcon("races.png");
imgWidth = img.getIconWidth();
imgHeight = img.getIconHeight();
int posY = 0;
for (int i = 0; i < numOfRacers; i++) {
System.out.println("Starting new thread..." + posY);
racer = new Racer(posY);
Thread racerThread = new Thread(racer);
racerThread.start();
posY += imgHeight;
}
}
protected class Racer extends JPanel implements Runnable {
private int lastPosX;
private int posX;
private int posY;
public Racer(int _posY) {
posX = 0;
posY = _posY;
}
@Override
public void paintComponent(Graphics g) {
// Call the method on the JPanel
super.paintComponent(g);
img.paintIcon(gui, g, posX, posY);
//posY += imgHeight;
posX += lastPosX + 3;
}
@Override
public void run() {
while (true) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
}
우. 내가 이것을 시도하자. – briennakh
그냥 그림이 아니란 것은 아닙니다. 구성 요소를 프레임에 추가하지 않으면 구성 요소를 칠할 수 없습니다. – camickr
이제 알겠습니다. 나는 그것에 대해 연구 할 것이다. – briennakh