2013-11-21 50 views
-1

我已經實現了Jspinner,其中我添加了mouseClicked Listener,它將微調器設置爲當前日期時間,但是在成功提交相同微調器需要設置爲空白後工作正常,但當我點擊第二次微調,它顯示舊值以及mouseClicked Listener沒有被調用爲什麼? 注意:我爲Spinner使用SpinnerDateModel。將更新後的值設置爲JSpinner

private void spinnerMouseClicked(java.awt.event.MouseEvent evt) { 
    spinner.setModel(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY)); 
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm"); 
    ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(format))); 

    ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().addCaretListener(new CaretListener() { 
     @Override 
     public void caretUpdate(CaretEvent e) { 
      if (0 == ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getCaretPosition()) { 
       if (((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getText().length() > 13) { 
        ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setCaretPosition(13); 
       } 
      } 
     } 
    }); 
} 

private void submit(){ 
((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setText(null); 

} 
+2

很難說沒有看到您的代碼:) – dic19

+0

沒有人知道,投票結束 – mKorbel

回答

1

閱讀問題幾次後,我覺得終於得到什麼是你要做到:每個用戶sumbits的信息文本必須被清除,但是當用戶再次聚焦微調,那麼它必須表現出今天的日期時間。不是嗎?

如果是這樣,那麼我建議你不要在JSpinner上使用MouseListener,而應該將FocusListener附加到微調器的編輯器上。事情是這樣的:

SpinnerDateModel model = new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_WEEK); 
final JSpinner spinner = new JSpinner(model); 
final JTextField editor = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField(); 

editor.addFocusListener(new FocusAdapter() { 
    @Override 
    public void focusGained(FocusEvent e) { 
     if(editor.getText().isEmpty()){ 
      spinner.getModel().setValue(new Date()); 
     } 
    } 
}); 

JButton submit = new JButton("Submit"); 
submit.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     editor.setText(""); 
    } 
}); 

這種方式,你有以下優點:

  • 微調的模式設置只是一個單一的時間(因爲它應該是)。
  • 當微調控件的編輯器被聚焦時(通過鼠標點擊或通過鍵盤導航),如果文本先前被清除,則將新的日期設置爲微調控制器型號
  • 擺脫MouseListener這是打算用於其他目的。
+0

我已經試過這個東西,但focusGained方法不會從第二次起調用。 – JavaLover

+0

那是怎麼回事?你什麼意思*第二次以後*?每次編輯器聚焦時都會調用focusGained。它應該是別的東西。例如,在您的代碼中,您每次點擊鼠標時都會在編輯器中添加一個新的「CaretListener」。所以它可能不會做預期的事情。 @JavaLover – dic19

+0

focusGained()僅在該方法沒有被調用後才被調用,這很奇怪。以及我從相同但刪除CaretListener但focusGained()沒有被調用。 – JavaLover