[英].setBounds() not working with nested 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 代表這些片段。 當它運行時,JLabels(Type1 和 Type2)不會出現在 setBounds() 指定的正確位置。 但是,在調用其自己的 setBounds() 時指定的正確位置設置了保存這些棋子的板 JPanel。 有什么關於為什么會發生這種情況的想法嗎? 可能是因為我是從 JLabel 繼承的還是 JLabel 類是內部類? 謝謝。
編輯:忘記指定 JLabels 只顯示在 JPanel 所在位置的左上角,無論我將它們設置為什么 x 和 y 位置。
看了另一個帖子后找到了答案。 我的繼承 JLabel 的類不會出現,但如果我將類型更改為 JLabel 它會
為了我自己的目的,我不小心覆蓋了 JLabel 的 getX() 和 getY()。 Java Swing 使用組件的 getX() 和 getY(),這就是 setBounds() 的更改沒有被反映的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.