.setBounds()不适用于嵌套JLabel

时间:2020-03-19 02:30:55

标签: java swing setbounds

我正在用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类代表片段。 运行此命令时,JLabel(Type1和Type2)不会显示在setBounds()指定的正确位置。但是,保存这些片段的板JPanel设置在正确的位置,该位置由其自己的setBounds()调用指定。 有什么关于为什么会发生这样的想法吗?可能是因为我继承自JLabel还是JLabel类是内部类?谢谢。

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

1 个答案:

答案 0 :(得分:0)

我在看另一篇文章后找到了答案。 My class inheriting JLabel won't show up but if I change the type to JLabel it does

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