【发布时间】:2014-11-13 21:54:03
【问题描述】:
这是我的应用程序结构: 一个 JFrame ---> 包含一个 Board1(Board1 扩展 JPanel)---> 包含一些“Zone”(Zone 使用 FlowLayout 管理器扩展 JLabel)----> 包含一些“Personnage”(扩展 JLabel)
首先我在 JPanel 的类中创建我所有的 JLabel:
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();
}
}
构造函数运行良好,我在“区域”上方看到了我的“人物”。 move_personnage 方法也有效!!!它会自动从上一个区域中删除人物。
问题是当我运行 try_add_personnage 方法时,区域上方没有 JLabel。但是我检查了该方法是否被调用等... 无论我在 Board1 构造函数之后做什么,我都无法在 Zone 上方添加任何新的可见 Personnage。
我猜是用paintComponent方法或类似的方法,但我没有找到解决方案。 我知道 JLayeredPane 可以做到这一点,但我不想使用它,因为我将来会为看板使用 GridBagLayout 管理器。
我希望我是可以理解的
【问题讨论】:
-
我不是很清楚吗?