.setBounds () не работает с вложенными JLabels - PullRequest
0 голосов
/ 19 марта 2020

Я делаю шахматоподобную игру в Java Swing (я знаю, что Swing - не правильный способ go об этом, но я все же хочу попробовать) У меня проблема с созданием шахмат фигуры появляются на дисплее в нужном темпе. Из-за характера физических позиций шахматных фигур я не могу использовать менеджер раскладки. Код выглядит примерно так (по общему признанию неловко спроектировано):

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 я их установил.

1 Ответ

0 голосов
/ 20 марта 2020

Я нашел ответ после просмотра другого поста. Мой класс, унаследовавший JLabel, не будет отображаться, но если я изменю тип на JLabel, он сделает

Я случайно переопределил функции getX () и getY () JLabel для своих собственных целей. Java Swing использует компоненты getX () и getY (), поэтому изменение с setBounds () не отражается.

...