gpt4 book ai didi

java - 扩展 JLabel 的 Draw 类

转载 作者:行者123 更新时间:2023-12-01 22:35:57 24 4
gpt4 key购买 nike

我正在尝试绘制扩展 JLabel 的“Zone”类。我不明白为什么这不起作用,我在网站上搜索了,但我没有看到出了什么问题

这是我的代码:

我的董事会类(class)

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

最佳答案

  1. 不要覆盖 paint,您已经破坏了绘制链,这将影响面板绘制其子项的能力。在执行任何自定义绘画之前,覆盖 paintComponent 并调用 super.paintComponent
  2. 不要处置不是您创建的Graphics上下文,这可能会阻止绘制其他组件。
  3. 不要在 paint 方法中添加组件,这些方法可以快速连续且随机地调用。

相反,在构造函数中添加组件

关于java - 扩展 JLabel 的 Draw 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com