私はそれぞれ別のスレッドにある4つの車オブジェクトを作成しようとしていますが、それぞれの車をユーザーが入力する異なる速度で移動させる方法を理解することはできません。ここjavaでマルチスレッドを使用していますか?
public class Racecar extends JApplet {
public Racecar() {
setLayout(new GridLayout(5, 1));
JPanel panel1 = new JPanel();
JLabel car1 = new JLabel("Car 1:");
panel1.add(car1);
JTextField jtfcar1 = new JTextField(3);
panel1.add(jtfcar1);
JLabel car2 = new JLabel("Car 2:");
panel1.add(car2);
JTextField jtfcar2 = new JTextField(3);
panel1.add(jtfcar2);
JLabel car3 = new JLabel("Car 3:");
panel1.add(car3);
JTextField jtfcar3 = new JTextField(3);
panel1.add(jtfcar3);
JLabel car4 = new JLabel("Car 4:");
panel1.add(car4);
JTextField jtfcar4 = new JTextField(3);
panel1.add(jtfcar4);
add(panel1, BorderLayout.NORTH);
JPanel panel2 = new JPanel();
panel2.setBorder(BorderFactory.createLineBorder(Color.black));
DrawCar car = new DrawCar(1);
panel2.add(car);
add(panel2);
JPanel panel3 = new JPanel();
panel3.setBorder(BorderFactory.createLineBorder(Color.black));
DrawCar car10 = new DrawCar(2);
panel3.add(car10);
add(panel3);
JPanel panel4 = new JPanel();
panel4.setBorder(BorderFactory.createLineBorder(Color.black));
DrawCar car11 = new DrawCar(3);
panel4.add(car11);
add(panel4);
JPanel panel5 = new JPanel();
panel5.setBorder(BorderFactory.createLineBorder(Color.black));
DrawCar car12 = new DrawCar(4);
panel5.add(car12);
add(panel5);
}
public static void main(String[] args) {
Racecar applet = new Racecar();
applet.init();
applet.start();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("");
frame.getContentPane().add(applet, BorderLayout.CENTER);
frame.setSize(400, 320);
frame.setVisible(true);
// Create tasks
Runnable race1 = new DrawCar(1);
Runnable race2 = new DrawCar(2);
Runnable race3 = new DrawCar(3);
Runnable race4 = new DrawCar(4);
// Create threads
Thread thread1 = new Thread(race1);
Thread thread2 = new Thread(race2);
Thread thread3 = new Thread(race3);
Thread thread4 = new Thread(race4);
// Start threads
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
}
そして、私のDrawCar方法である:
public class DrawCar extends JPanel implements ActionListener, Runnable {
private int delay = 10;
private Timer timer = new Timer(delay, this);
private int x1 = 20;
private int y1 = 22;
int r = (int)(Math.random()*256);
int q =(int)(Math.random()*256);
int b = (int)(Math.random()*256);
Color color = new Color(r, q, b);
public DrawCar(int x) {
timer.start();
}
public void actionPerformed(ActionEvent e) {
repaint();
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(color);
g.fillRoundRect(x1, y1, 75, 20, 10, 10);
g.fillArc(x1, y1 - 10, 50, 15, 0, 180);
g.fillOval(x1 + 2, y1 + 10, 20,20);
g.fillOval(x1 + 40, y1 + 10, 20, 20);
if(x1 > getWidth()) {
x1 = -100;
}
x1 += 1;
repaint();
}
public Dimension getPreferredSize() {
return new Dimension(400, 320);
}
private class TimerListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
repaint();
}
}
public void run() {
try {
//int x = Racecar.getSpeed();
Thread.sleep(1500);
}
catch (InterruptedException ex) {
}
}
}
* * "私は別のスレッドでそれぞれ4つの車のオブジェクトを作成しようとしている" 役立つだろう - まあありますがそこに問題があります。代わりに、すべての車を更新する単一のスレッド、各車がオブジェクトであって、各サイクルでどのくらいの変更が発生するかを決定する独自の速度プロパティを持つ必要があります – MadProgrammer