gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:54:00 26 4
gpt4 key购买 nike

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

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