2014-11-13 3 views
0

Вот моя структура приложения: один 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 для доски.

Я надеюсь, я понятно

+0

Я не очень понятен? – user3734658

ответ

0

Я нашел решение. Это была моя перекраска, которой было недостаточно, мне пришлось сделать JPanel.revalidate(); и после JPanel.repaint();