我有一个简单的对象,它扩展了 JPanel
。当在此对象上调用 update()
方法时,它应该向面板添加一些标签,然后重绘。但是,在调用更新方法后,标签不会显示出来。下面是更新的代码:
public void update(){
GridBagConstraints constraints = new GridBagConstraints();
if(cardsHidden){
for(int i = 0; i < 2; i++){
constraints.gridx = i;
constraints.gridy = 0;
JLabel card = new JLabel(PlayingCards.cardImages[PlayingCards.CARD_BACK_INDEX]);
add(card, constraints);
}
}
else{
Card[] holeCards = player.getHoleCards();
for(int i = 0; i < holeCards.length; i++){
constraints.gridx = i;
constraints.gridy = 0;
JLabel card = new JLabel(holeCards[i].getImageIcon());
add(card, constraints);
}
}
validate();
repaint();
}
有什么想法吗?
谢谢。
编辑
问题已解决:
事实证明,HoleCardsPanel
没有正确地添加到其父框架中。一旦修复了这个问题,添加新的 JLabel
就正常工作了。我还:
- 使用
SwingUtilities.invokeLater
在事件分派线程中调用了update()
方法 - 必须从最上层组件(在这种情况下是
JFrame
)中调用validate()
,如 Devon_C_Miller 在他的回答中建议的那样。