【问题标题】:Paint JLabel above another JLabel without JLayeredPane在没有 JLayeredPane 的另一个 JLabel 上方绘制 JLabel
【发布时间】: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 管理器。

我希望我是可以理解的

【问题讨论】:

  • 我不是很清楚吗?

标签: java swing paint jlabel


【解决方案1】:

我找到了解决方案。 这是我的重绘还不够,我不得不制作JPanel.revalidate();JPanel.repaint(); 之后

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多