Я хотел бы отобразить разные картинки в JFrame (в случайном порядке). Я использую потоки в приложении, так как дисплей должен постоянно обновляться.
public class CarsMain extends JFrame implements Runnable {
Random rand = new Random();
//the main thread
Thread thread;
BufferedImage backbuffer;
Cars cars;
Car1 car1;
//set map of the cars array
private int Width = 10;
private int Height = 100;
int[][] map=new int[Width][Height];
public static void main(String[] args) {
new CarsMain();
}
public CarsMain() {
super("Cars");
setSize(500,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thread = new Thread(this);
thread.start();
}
//thread run event
public void run() {
Thread current = Thread.currentThread();
while (current == thread) {
try { Thread.sleep(0); }
catch(InterruptedException e) { e.printStackTrace(); }
genmap();
}
}
//Fills map[][] with random numbers (id's)
private void genmap() {
for (int i = 0; i<10;i++){
for (int j = 0; j<20; j++){
map[i][j] = rand.nextInt(5);
}
}
}
//JFrame paint event
public void paint(Graphics g) {
g.drawImage(backbuffer, 0, 0, this);
for (int i = 0;i<600;i+=128){
for(int j=30; j<500;j+=128){
//this is the part i am stuck on
// v this is just put here to test that display
g.drawImage(cars.Car1.getpic(),i, j, this);
}
}
}
}
и
public class Cars{
public Image pic;
public int carid;
public Cars carList[]= new Cars[10];
public Cars(int i){
carid = i;
}
public Image getpic(){
return pic;
}
public void setpic(Image pic){
this.pic = pic;
}
public int getCarid(int i){
return Carid;
}
public static final Cars car0 = new car0(1);
public static final Cars Car1 = new car1(2);
public static final Cars Car2 = new car2(3);
public static final Cars Car3 = new car3(4);
public static final Cars Car4 = new car4(5);
}
(каждый из классов автомобилей # расширяет класс Cars, чтобы я мог переопределить их позже)
То, что я пытался сделать, это создать многомерный массив (genmap ()), который был заполнен случайными числами (который прекрасно работает (и есть ли способ, которым я могу запустить это только один раз в потоке?)), Эти случайные числа будут соответствовать идентификатор автомобиля Затем выведите на экран соответствующее изображение автомобиля, используя идентификатор, вот где я застрял.
Я пробовал разные способы, но обычно получается, что «pic» должен быть статичным (чего не может быть, иначе он будет показывать только изображение car4)
Я знаю, что мог бы использовать операторы if, но действительно хотел бы использовать идентификатор напрямую, поэтому позже легко добавлять новые автомобили (просто создайте новый объект в классе Cars), у кого-нибудь есть идеи?