2014-07-24 4 views
0

현재 시간을 사용하여 datemodel을 사용하여 JSpinner를 설정했습니다.JSpinner가 충돌 함 setStartDate

startDateModel = new SpinnerDateModel(Calendar.getInstance().getTime(),null,null,Calendar.YEAR); 
    startDateSpinner = new JSpinner(startDateModel); 
    JSpinner.DateEditor startEditor = new JSpinner.DateEditor(startDateSpinner,"yyyy.MM.dd. HH:mm"); 
    startDateSpinner.setEditor(startEditor); 

나는 스레드를 시작하는 버튼이 있고 나는 사용자가 버튼을 누를 때의 JSpinner의 startDate를 설정합니다. 하지만 startDate를 설정하면 JSpinner가 작동을 멈 춥니 다.

Start.addActionListener(new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent arg0) 
     { 
      startDateModel.setValue(Calendar.getInstance().getTime()); 
      startDateModel.setStart(Calendar.getInstance().getTime()); 

      //do some stuff 
      //start thread 
     } 

    }); 

는 그동안 나는 ChangeListener를 사용하는 솔루션을 찾을 수 있었다. 당신의 도움에 대한

startDateSpinner.addChangeListener(new ChangeListener() 
    {  
      @Override 
      public void stateChanged(ChangeEvent e) 
      { 
       if(startDateModel.getDate().before(startDate)) 
       { 
        startDateModel.setValue(startDate); 
       } 

       if(startDateModel.getDate().after(endDate)) 
       { 
        startDateModel.setValue(endDate); 
       } 
      } 
    }); 

감사합니다.

+1

1. 나는 [SpinnerDateModel 등]로 시작되는 것 (http://docs.oracle.com/javase/7/docs/api/javax/swing/SpinnerDateModel.html), 다음 2. 검색하기 3. SSCCE/MCVE를 게시하지 않고 성공하지 못한 경우 이전 옵션 모두가 실패한 경우 – mKorbel

+1

'// 이벤트 스레드 파생 코드'(http : //docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html) GUI가 응답하지 않을 수 있습니다. – dic19

+1

actionPerformed (..) 코드가 Event Dispatch Thread에서 실행 중입니다. 귀하의// 스레드 코드를 시작 아마 뭔가를 차단합니다. 스레드 코드도 붙여 넣을 수 있습니까? –

답변

0

다음과 같은 방법으로 문제를 해결했습니다.

startDateSpinner.addChangeListener(new ChangeListener() 
{  
     @Override 
     public void stateChanged(ChangeEvent e) 
     { 
      if(startDateModel.getDate().before(startDate)) 
      { 
       startDateModel.setValue(startDate); 
      } 

      if(startDateModel.getDate().after(endDate)) 
      { 
       startDateModel.setValue(endDate); 
      } 
     } 
});