java - .setBounds() 不适用于嵌套 JLabels

标签 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 代表碎片。 运行时,JLabels(Type1 和 Type2)不会显示在 setBounds() 指定的正确位置。然而,保存这些部分的板 JPanel 被设置在调用其自己的 setBounds() 指定的正确位置。 有谁知道为什么会发生这种情况吗?可能是因为我继承自 JLabel 或者 JLabel 类是内部类?谢谢。

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

最佳答案

我看了另一篇文章后找到了答案。 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() 的更改没有被反射(reflect)的原因。

关于java - .setBounds() 不适用于嵌套 JLabels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60750133/

相关文章:

java - netty channel.iswritable() 返回 false,当并发级别高时

java - 处理序列化类中包含 transient 成员的线程的正确做法

Java - 同一窗口上的另一个 JFrame

java - 忽略设置界限

java - 为什么空布局和绝对位置在 Swing 中是不好的做法?

java - 如何将对象从 Controller 传递到jsp页面,然后迭代该对象以将它们显示在表格中?

java - 从字符串中提取字符串

Java GUI 一直挂起

带有 ActionListeners 的 Java 作用域

java - 如何修改 JComponent 的 setBounds 方法?