我正在尝试绘制扩展JLabel的“ Zone”类。我在网站上进行了搜索,但我不明白为什么这行不通,但我没有发现出了什么问题

这是我的代码:

我的董事会班

public class Board extends JPanel {

private List<Zone> zones = new ArrayList<Zone>();

public Board() {
    zones.add(new Zone(1, false, true, dalle1C, null, "/zone1D1C.jpg", 0, 0, this));
    zones.add(new Zone(2, false, false, dalle1C, null, "/zone2D1C.jpg", 150, 0, this));
    zones.add(new Zone(3, false, false, dalle1C, null, "/zone3D1C.jpg", 300, 0, this));
    zones.add(new Zone(4, true, false, dalle1C, null, "/zone4D1C.jpg", 0, 150, this));
    zones.add(new Zone(5, false, false, dalle1C, null, "/zone5D1C.jpg", 300, 150, this));
    zones.add(new Zone(6, true, false, dalle1C, null, "/zone6D1C.jpg", 0, 300, this));
    zones.add(new Zone(7, true, false, dalle1C, null, "/zone7D1C.jpg", 150, 300, this));
    zones.add(new Zone(8, false, false, dalle1C, null, "/zone8D1C.jpg", 300, 300, this));
    zones.get(1).addConnexion(connexion);
    connexion = new PassageGD(zones.get(1), zones.get(2), false, false);
    zones.get(1).addConnexion(connexion);
    connexion = new PassageHB(zones.get(2), zones.get(4), false, false);
    zones.get(4).addConnexion(connexion);
    connexion = new PassageGD(zones.get(3), zones.get(4), false, false);
    zones.get(4).addConnexion(connexion);
    connexion = new PassageHB(zones.get(4), zones.get(7), false, false);
    zones.get(4).addConnexion(connexion);
    connexion = new PassageHB(zones.get(3), zones.get(6), false, false);
    zones.get(6).addConnexion(connexion);
    connexion = new PassageGD(zones.get(5), zones.get(6), false, false);
    zones.get(6).addConnexion(connexion);
    connexion = new PassageHB(zones.get(3), zones.get(5), false, false);
    zones.get(5).addConnexion(connexion);
    }
}

public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    setBackground(Color.BLACK);
    for (Zone zone : zones) {
        this.add(zone);
    }
    Toolkit.getDefaultToolkit().sync();
    g.dispose();
}


和我的区域类:

public class Zone extends JLabel implements ActionListener {
...
...
public Zone(Integer id, boolean piece, boolean egout, Dalle[] dalles, List<Connexion> connexions,    String image_name, Integer x, Integer y, Board board) {
    zone = this;
    addMouseListener(new TAdapter());
    this.board = board;
    if(connexions != null) {
        this.connexions = connexions;
        for(Connexion connexion : connexions) {
            connexion.getOtherZone(this).addConnexion(connexion);
        }
    }
    ImageIcon ii = new ImageIcon(this.getClass().getResource(image_name));
    this.x = x;
    this.y = y;
    this.x_end = x + image.getWidth(null);
    this.y_end = y + image.getHeight(null);
    this.setBorder(null);
    this.setIcon(ii);
    this.setText(null);
    this.setVisible(true);
}

最佳答案

不要覆盖paint,您已经中断了绘制链,这将影响面板绘制其子级的能力。执行任何自定义绘画之前,覆盖paintComponent并调用super.paintComponent
不要处理未创建的Graphics上下文,这可能会导致其他组件无法绘制。
不要在paint方法内添加组件,可以快速连续地随机调用这些方法。


而是在构造函数中添加组件

09-25 19:34