私はJava Swing Memory Gameを構築しています。最初のカードをクリックするのがアイデアです。イメージをbaseImageから別のイメージに変更します。 2枚目のカードをクリックすると、同じことをしてから数秒間待ってから、一致しない場合はすべて元に戻します。なぜ私のfirstCardClicked.setDisabledIcon(img)は機能しますが、私のsecondCardClicked.setDisabledIcon(img)は機能しません?
ここで、一致しない場合、2枚目のカードは決して画像を変更しません。以下は関連するコードです。彼らが一致すると、画像が表示され、すべてが正しく、世界で良いことに注意する必要があります。
public void cardClickHandler(ActionEvent ae) {
JButton card = new JButton();
card = (JButton) ae.getSource();
// disable the card that was clicked
card.setEnabled(false);
// behavior for first card clicked
if (clickCounter == 0) {
firstCardClicked = card;
img = new ImageIcon("images2/img" + firstCardClicked.getName() + ".jpg");
firstCardClicked.setDisabledIcon(img);
System.out.println("Button " + firstCardClicked.getName() + " clicked!");
clickCounter++;
}
// behavior for second card clicked
else {
secondCardClicked = card;
img = new ImageIcon("images2/img" + secondCardClicked.getName() + ".jpg");
secondCardClicked.setDisabledIcon(img);
System.out.println("Button " + secondCardClicked.getName() + " clicked!");
clickCounter--;
}
// behavior if two cards have been clicked and they match
if (firstCardClicked.getName().equals(secondCardClicked.getName()) && clickCounter == 0) {
// player turn control and scoring
if (p1Turn) {
p1NumScore++;
p1Score.setText(Integer.toString(p1NumScore));
scorePanel.revalidate();
System.out.println("Good job Mike, got a pair!");
p1Turn = !p1Turn;
}
else {
p2NumScore++;
p2Score.setText(Integer.toString(p2NumScore));
scorePanel.revalidate();
System.out.println("Good job Peanut, got a pair!");
p1Turn = !p1Turn;
}
}
// behavior if two cards have been clicked and they do not match
else if (!(firstCardClicked.getName().equals(secondCardClicked.getName())) && clickCounter == 0) {
// keep cards flipped for a few seconds
try {
System.out.println("Before Sleep"); // testing
Thread.sleep(2000);
System.out.println("After Sleep"); // testing
}
catch (Exception e) {
e.printStackTrace();
}
// enable the cards and reset images
firstCardClicked.setEnabled(true);
firstCardClicked.setIcon(baseImage);
secondCardClicked.setEnabled(true);
secondCardClicked.setIcon(baseImage);
// change turns
p1Turn = !p1Turn;
System.out.println("Keep Playing");
}
}
イベント処理では 'Thread.sleep(int) 'を使用しないでください。 GUIをブロックします。 –
短い実行可能な例([MVCE](http://stackoverflow.com/help/mcve))も提供してください。 –
@SergiyMedvynskyy初心者として、私はSwingでの問題のために 'Thread.sleep(int)'から離れようとしました。残念ながら、私はSwing Timerを正しく実装する方法を理解することができず、十分に機能しました。私は明日MVCEにこれを分解しようとします。すべてを感謝します。 –