我正在 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/