Draw类扩展了JLabel

时间:2014-11-11 09:50:18

标签: java swing draw jlabel

我试图画出我的" Zone"扩展JLabel的类。我不明白为什么这不起作用,我在网站上搜索,但我没看到出了什么问题

这是我的代码:

我的董事会课程

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();
}

我的Zone类:

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);
}

1 个答案:

答案 0 :(得分:3)

  1. 不要覆盖paint,你已经打破了油漆链,这将影响面板绘制它的孩子的能力。覆盖paintComponent并在执行任何自定义绘制之前调用super.paintComponent
  2. 不要处置您未创建的Graphics上下文,这可能会阻止其他组件被绘制。
  3. 不要在paint方法中添加组件,可以快速连续并随机调用这些方法。
  4. 而是在构造函数中添加组件