2013-10-25 3 views
0

내 함수는 3 개의 임의의 숫자를 그리고이 숫자에 따라 JLabel (1, 2, 3)에 적절한 아이콘을 설정합니다. 2 초 후에이 아이콘을 변경해야합니다.2 초 후의 두 번째 스레드

public void random() { 
    Random rand = new Random(); 
    num1 = rand.nextInt(3); 
    num2 = rand.nextInt(3); 
    num3 = rand.nextInt(3); 

    if (num1==0){ 
     one.setIcon(icon7); 
    } 
    if (num1==1){ 
     one.setIcon(icon8); 
    } 
    if (num1==2){ 
     one.setIcon(icon9); 
    } 

    if (num2==0){ 
     two.setIcon(icon7); 
    } 
    if (num2==1){ 
     two.setIcon(icon8); 
    } 
    if (num2==2){ 
     two.setIcon(icon9); 
    } 

    if (num3==0){ 
     three.setIcon(icon7); 
    } 
    if (num3==1){ 
     three.setIcon(icon8); 
    } 
    if (num3==2){ 
     three.setIcon(icon9); 
    }} 

2 초 후에 나는이 같은 아이콘 변경하려면 : 나는 아무 생각이

one.setIcon(icon10); 
    two.setIcon(icon10); 
    three.setIcon(icon10); 

을,이 작업을 수행하는 방법, 저를 도와주세요 :)

답변

3
final Timer timer = new Timer(2000, null); 
ActionListener listener = new ActionListsner() { 

@Override 
public void actionPerformed(ActionEvent e) { 

     one.setIcon(icon10); 
     two.setIcon(icon10); 
     three.setIcon(icon10); 
} 
}; 
timer.addActionListener(listener); 
timer.start(); 

이를 코드는 2 초마다 setIcon 함수를 호출하지만 1 ~ 2 회만 호출하려는 경우 actionPerformed 함수 아래에 조건을 넣을 수 있습니다 ... 도움이되기를 바랍니다 ... ..

+0

정확히 한 번만 호출하려는 경우 생성 직후에'timer.setRepeats (false);를 설정하십시오. – Holger

+0

고마워요! 그것은 작동합니다 :) – user1950221

0

내가 조금 먼저 코드를 변경할 것입니다 : 다음 반복되지 않는 스윙 Timer를 사용하는 scheduleReset 방법을 작성합니다

private static final Random rand = new Random(); 

//somewhere on init. 
final JLabel[] myLabels = new JLabel[3]; 
for(int i = 0; i < myLabels.length; ++i) { 
    myLabels[i] = new JLabel(); 
    //add to panel or whatever. 
} 

private void setIcon(final int value, final JLabel label) { 
    switch(value) { 
     case 0: 
      label.setIcon(icon7); 
      break; 
     case 1: 
      label.setIcon(icon8); 
      break; 
     case 2: 
      label.setIcon(icon9); 
      break; 
     default: 
      throw new IllegalArgumentException("Value must be between 0 and 2."); 
    } 
} 

public void random() { 
    for(int i = 0; i < myLabels.length; ++i) { 
     setLabel(rand.nextInt(3), myLabels[i]); 
    } 
    scheduleReset(); 
} 

.

public void scheduleReset() { 
    final Timer timer = new Timer((int) TimeUnit.SECONDS.toMillis(2), new ActionListener() { 
     @Override 
     public void actionPerformed(final ActionEvent ae) { 
      resetIcons(); 
     } 
    }); 
    timer.setRepeats(false); 
    timer.start(); 
} 

public void resetIcons() { 
    for(int i = 0; i < myLabels.length; ++i) { 
     myLabels[i].setIcon(icon10); 
    } 
}