.setBounds()不适用于嵌套的JLabels



我正在用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类是内部类?谢谢

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

我在看了另一篇帖子后找到了答案。我的继承JLabel的类赢得了';没有显示,但如果我将类型更改为JLabel,则会显示

出于我自己的目的,我不小心高估了JLabel的getX((和getY((。JavaSwing使用组件的getX((和getY((,这就是为什么setBounds((的更改没有得到反映的原因。

相关内容

  • 没有找到相关文章

最新更新