拡張する単純なオブジェクトがあります。このオブジェクト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それが修正されると、新しいs の追加は正常に機能します。私も:
- を使用して、メソッドへの呼び出しを
update()イベントディスパッチスレッドに追加しましたSwingUtillities.invokeLater - Devon_C_Millerが回答で示唆しているように
validate()、最上位のコンポーネント (この場合は) から呼び出す必要がありました。JFrame