첫 번째 스윙 응용 프로그램을 만들고 있습니다. 그것은 포커 카드를 사용하는 메모리 게임입니다.클릭 후 JLabel 아이콘을 변경하고 잠시 기다려주십시오.
JLabel
을 사용하여 카드를 시뮬레이션하고 앞면과 뒷면에 아이콘을 설정합니다. 각 카드는 MouseListener
이고 사용자가 클릭 할 때 두 개의 카드가 같은지 확인합니다. 두 장의 카드가 같은 카드가 아닌 경우이 두 장의 카드를 1 ~ 2 초 동안 표시하고이 지연 후에 아이콘을 다시 변경하십시오.
sleep
, wait
, invokeLater
, invokeAndWait
...을 사용해 보았지만 아무것도 작동하지 않았습니다.
이 내 메인 클래스입니다 : JFrame
에서
public class Main {
public static void main(String[] args) throws FontFormatException, IOException {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
MyApp window = new MyApp();
} catch (FontFormatException | IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
}
MyApp
상속합니다.
while (cont < cardsInGame.size()){
this.cardsInGame.get(cont).setBounds(x, y, 100, 140);
panelTablero.add(cardsInGame.get(cont));
cardsInGame.get(cont).addMouseListener(this);
x = x+108+5;
if ((cont+1)%8 == 0 && cont != 0){
y = y+140+15;
x = 53;
}
cont++;
}
을 그리고 이것은의 MouseListener입니다 : 그 안에, 나는 하나 개의 패널에 내 모든 카드를 추가 내 코드에서 JOptionPane.showMessageDialog(vp, "Wait")
에 전화를 넣어 경우
public void mouseClicked(MouseEvent e) {
Card selectedCard = (Card)e.getSource();
if (selectedCard != activeCard){
selectedCard.setIcon(new ImageIcon("img/"+selectedCard.getSuit()+selectedCard.getValue()+".png"));
//JOptionPane.showMessageDialog(vp, "Wait");
if (activeCard != null && !activeCard.getPaired()) {
int result = activeCard.isPair(selectedCard);
pairsTried++;
if (result != 0){
// PAIR
}
else{
// I WANT TO WAIT HERE
// NO PAIR
selectedCard.setIcon(new ImageIcon(CARD_BACK));
activeCard.setIcon(new ImageIcon(CARD_BACK));
}
activeCard = null;
}
else{
activeCard = selectedCard;
}
}
}
은 모두 잘 작동합니다. 아이콘이 새로 고쳐진 후 대화 상자가 표시 될 때까지 기다립니다. 그렇지 않으면 아이콘이 새로 고쳐지지 않습니다 (또는 초고속이며 표시되지 않습니다).
이 지연을 어떻게 추가 할 수 있습니까?
스윙 타이머를 사용하십시오. 타이머가 작동하면 아이콘을 재설정합니다. – camickr
또한 가능한 [예] (http://stackoverflow.com/questions/13617871/open-card-after-certain-time/13618136#13618136) – MadProgrammer
감사합니다. MadProgrammer. 이 예제는 나에게 완벽하다. 내 애플 리케이션에서 시도하고 그것을 작동합니다! – Emerge