JFrame и JPanel в JAVA. не все отрисовываются

170
03 ноября 2019, 14:30

мое задание - написать имитацию тараканьих бегов. у меня есть такие классы: Game - основной класс, создает JFrame и принимает входной параметр (количество дорожек. так по заданию нужно) Window - класс-наследник JFrame. устанавливаются параметры фрейма, создаются и добавляется на тот же фрейм объекты класса Panel и Cockroach. тараканы добавляются следующим образом:

for (int i = 0; i < Game.getNumbOfTrack(); i++) {
        Cockroach cockroach = new Cockroach(y);
        cockroach.setBackground(Color.WHITE);
        add(cockroach);
    }

класс Panel - наследник Jpanel, на этой панели нарисованы дорожки для тараканов класс Cockroach - наследник Panel, имплементирует Runnable. код класса:

  public class Cockroach extends Panel implements Runnable
{

     Random random = new Random();
    private Thread thread;
    private int x = 145;
    private int y;
private Image cockr;

public Cockroach(int y) {
    this.y = y;
    try {
        cockr = ImageIO.read(new File("C:\\Users\\Roman-pc\\IdeaProjects\\Races\\images\\Cockroach.gif"));  // загрузка картинки с диска
    } catch (IOException e) {
        e.printStackTrace();
    }
    thread = new Thread(this, "tarakan");
    thread.start();

    repaint();
}
@Override
public void run() {
    while (this.x < 500) {
        this.x += 15;
        try {
            Thread.sleep(random.nextInt(1000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.repaint();
    }
}
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(cockr, this.x, this.y + 15, null);
}

} каждый таракан внешне представляет из себя картинку, загруженную с диска, которая должна двигаться по своей дорожке. на каждой дорожке своя картинка.

ошибка в том, что рисуется и бежит только один таракан и всегда именно на последней дорожке, уже все перепробовал, не могу понять в чем дело. пробовал убрать потоки и оставить в классе чисто отрисовку этих тараканов, но все равно та же история. пробовал добавлять отдельно каждого таракана (не циклом), все равно рисуется только последний что может быть не так? как сделать, чтобы рисовались все тараканы? плиз хелп!! P.S. извиняюсь за много текста и кода, просто первый раз пробую графический интерфейс и потоки

Answer 1

С этим вопросом разобрался, цикл создания тараканов должен был выглядеть так:

int y = 100;
        for (int i = 0; i < Game.getNumbOfTrack(); i++) {
            String str = Integer.toString(i);
            Cockroach cockroach = new Cockroach(y,"на " + str + " дорожке", i +1);
            cockroach.setBackground(Color.WHITE);
            add(cockroach);
            setVisible(true);
            y += 150;
        }
READ ALSO
Не работаєт @NotNull

Не работаєт @NotNull

@NotNull это аннатоция из пакета javaxvalidation

144
Алгоритм генерации уникальных чисел

Алгоритм генерации уникальных чисел

Есть число N, необходимо найти все уникальные числа до 0 до NНапример из чисел 123,132,213,231,312,321 уникальным будет только любое одно, но если N = 321, то скорее...

169
Как обратиться к API VK через node-vk-bot-api

Как обратиться к API VK через node-vk-bot-api

Есть библиотека - node-vk-bot-api Как с помощью нее обратиться например за методом usersget (возвращающее информацию о профиле)

129
Экспорт данных в excel из html на javascript

Экспорт данных в excel из html на javascript

На сервере или на клиенте грамотно делать генерацию excel файлов? Таблица для экспорта сделана на флексахНа клиентской стороне на js нормально...

129