2014-07-24 36 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.我与[Spin​​nerDateModel]被启动(http://docs.oracle.com/javase/7/docs/api/javax/swing/SpinnerDateModel.html),2。然后,以搜寻这里是关于可能的变化,3.在没有成功的情况下发布SSCCE/MCVE,前面的选项都失败 – mKorbel

+1

请确保'//启动线程代码(不管它是什么)不阻塞[Event Dispatch Thread](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); 
      } 
     } 
});