我正在用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位置是什么。
答案 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()的更改未得到反映的原因。