Я работаю над маленькой карточной игрой, и у меня были некоторые проблемы: когда я пытаюсь добавить динамические компоненты в свой JLayeredPane
, он не отображает их.Проблемы с отображением JLayeredPane
У меня есть пользовательский компонент, который представляет собой карту, и я хочу отобразить 2 из них в многоуровневой форме. Для этого у меня есть следующий класс:
public class PairView extends JPanel {
private JLayeredPane layeredPane;
private CardView attackCard;
private CardView defenceCard;
private static Point origin = new Point(0, 0);
private static int offset = 10;
public PairView() {
}
public PairView(Card attackCard) {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
layeredPane = new JLayeredPane();
layeredPane.setPreferredSize(new Dimension(120, 170));
this.defenceCard = null;
this.attackCard = new CardView(attackCard);
this.attackCard.setOpaque(true);
this.attackCard.setForeground(Color.black);
this.attackCard.setBorder(BorderFactory.createLineBorder(Color.black));
this.attackCard.setBounds(origin.x, origin.y, 100, 150);
layeredPane.add(this.attackCard, 0);
this.origin.x += offset;
this.origin.y += offset;
}
public void addDefenceCard(Card defenceCard) throws DurakException {
if (this.defenceCard == null) {
this.defenceCard = new CardView(defenceCard);
this.defenceCard.setOpaque(true);
this.defenceCard.setForeground(Color.black);
this.defenceCard.setBorder(BorderFactory.createLineBorder(Color.black));
this.defenceCard.setBounds(origin.x, origin.y, 100, 150);
layeredPane.add(this.defenceCard, 1);
} else {
throw new DurakException("A defence Card is already present");
}
}
Я испытал это через перетаскивания интерфейса в NetBeans и у меня есть следующая проблема:
- Из того, что я понимаю, конструктор по умолчанию всегда вызываемый, поэтому, когда я создаю 2 случайных компонента
CardView
и добавляю их на многоуровневую панель в конструкторе по умолчанию, родительскийJFrame
отображает их просто отлично. - Если я использую перезаписанный конструктор или пытаюсь добавить другой компонент (например, метод
addDefenceCard
), он не отображает добавленный компонент. - , вызывающий
revalidate()
илиrepaint()
ничего не делает.
Как получить компоненты для показа?
* «Как получить компоненты для показа?» * Я добавил это как вопрос. Если это ** не ** вопрос, пожалуйста, [edit] (http://stackoverflow.com/posts/32781510/edit) и добавьте один .. –