0

我正在用 Java Swing 制作类似国际象棋的游戏(我知道 Swing 不是正确的方法,但我还是想尝试一下)我在让棋子出现在显示器上时遇到问题适当的步伐。由于棋子物理位置的性质,我不能使用布局管理器。代码看起来像这样(诚然,它的设计很笨拙):

public class Window extends JFrame {
  private JPanel board;
  public Window() {
    super();
    board = new JPanel();
    JLabelOrganizer jlo = new JLabelOrganizer();
    for (JLabel: JLabelOrganizer) {
      JLabel.setBounds(calcX(), calcY(), width, height);
      board.add(JLabel);
    }
    board.setBounds(x, y, width1, height1);
    board.setLayout(null);
    add(board);
    setLayout(null);
  }
  public class JLabelOrganizer {
    public JLabelOrganizer {
      instantiate Type1 and Type2 JLabel objects and store them
    }
    public class Type1 extends JLabel {
    }
    public class Type2 extends JLabel {
    }
  }
}

类 Type1 和 Type2 代表这些片段。运行时,JLabels(Type1 和 Type2)不会显示在 setBounds() 指定的正确位置。然而,持有这些棋子的棋盘 JPanel 被设置在正确的位置,由它自己的 setBounds() 调用指定。有没有人知道为什么会这样?可能是因为我从 JLabel 继承或 JLabel 类是内部类?谢谢。

编辑:忘记指定 JLabels 只显示在 JPanel 所在位置的左上角,无论我将它们设置到什么 x 和 y 位置。

4

1 回答 1

0

我在看了另一篇帖子后找到了答案。 我的继承 JLabel 的类不会显示,但如果我将类型更改为 JLabel 它会显示

我出于自己的目的不小心覆盖了 JLabel 的 getX() 和 getY()。Java Swing 使用组件的 getX() 和 getY() 这就是为什么没有反映 setBounds() 的更改。

于 2020-03-20T01:34:29.317 回答