Java Отображение разных объектов - PullRequest
0 голосов
/ 29 февраля 2012

Я хотел бы отобразить разные картинки в 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), у кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Я не буду подробно останавливаться на вашем коде - общий подход должен быть:

  • Используйте javax.swing.Timer для периодического обновления изображения
  • используйте Random.nextInt(n+1), чтобы выбрать изображение из набора n изображений
  • хранить изображения (или только их файл или URL) в списке или массиве
    • загрузить выбранное изображение из файла / URL, если необходимо
  • сказать графическому интерфейсу перекрасить
  • графический интерфейс должен получить текущее изображение и нарисовать его
0 голосов
/ 29 февраля 2012

Вы не можете получить доступ к изображению, которое еще не было создано.Статические элементы создаются при запуске.Но ваша картинка создается при создании Cars.

Создайте каждую машину в своем классе CarsMain и добавьте их в массив, который есть в Cars.Тогда напишите геттер и используйте его.

Я думаю, что то, что вы делаете здесь, крайне обескураживает.И твоя структура ужасна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...