Вот моя структура приложения: один JFrame --->, который содержит один Board1 (Board1 extends JPanel) ---> который содержит некоторую «зону» (зона расширяет JLabel с помощью диспетчера FlowLayout) ---> которые содержат некоторые «Personnage» (расширяет JLabel)Paint JLabel выше другого JLabel без JLayeredPane
Сначала я создаю все мои компоненты JLabel в классе JPanel в:
public class Board1 extends JPanel implements Board {
private List<Zone> zones = new ArrayList<Zone>();
private List<Personnage> personnages = new ArrayList<Personnage>();
public Board1() {
this.setLayout(null);
zones.add(new Zone(1, false, true, null, "/zone1D1C.jpg", this));
zones.add(new Zone(2, false, false, null, "/zone2D1C.jpg", this));
zones.add(new Zone(3, false, false, null, "/zone3D1C.jpg", this));
zones.add(new Zone(4, true, false, null, "/zone4D1C.jpg", this));
zones.add(new Zone(5, false, false, null, "/zone5D1C.jpg", this));
zones.add(new Zone(6, true, false, null, "/zone6D1C.jpg", this));
zones.add(new Zone(7, true, false, null, "/zone7D1C.jpg", this));
zones.add(new Zone(8, false, false, null, "/zone8D1C.jpg", this));
personnages.add(new Survivant("Phil", zones.get(0), 3, "/phil.jpg"));
for (Zone zone : zones) {
this.add(zone);
for (Personnage personnage : zone.getPersonnages()) {
zone.add(personnage);
}
}
}
public void move_personnage(Zone zone) {
running_personnage.moveZone(zone);
zone.add(running_personnage);
this.repaint();
}
public void try_add_personnage() {
Personnage douglas = new Survivant("Douglas", zones.get(3), 3, "/douglas.jpg");
zones.get(3).add(douglas);
this.repaint();
}
}
конструктор работает хорошо, я вижу, что я «Personnage» выше «зона». метод move_personnage работает тоже !!! Он автоматически удаляет персонаж из предыдущей зоны.
Проблема в том, что у меня запущен метод try_add_personnage, над зоной нет JLabel. Однако я проверил, что метод вызван и т. Д. Что бы я ни делал после конструктора Board1, я не могу добавить какой-либо новый видимый Personnage над зоной.
Я думаю, что это с методом paintComponent или что-то в этом роде, но я не нашел решение. Я знаю, что это возможно с JLayeredPane, но я не хочу использовать его, потому что в будущем я буду использовать диспетчер GridBagLayout для доски.
Я надеюсь, я понятно
Я не очень понятен? – user3734658