簡體   English   中英

.setBounds() 不適用於嵌套的 JLabels

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM