2013-11-21 2 views
-1

저는 Jspinner를 구현했습니다. mouseClicked Listener를 추가하여 현재 날짜 시간으로 회 전자를 설정했지만 회신을 성공적으로 완료 한 후에는 작동하지 않는 공백으로 설정해야합니다. 스피너를 두 번째 누른 다음 이전 값뿐만 아니라 mouseClicked Listener가 호출되는 이유가 무엇입니까? 참고 : 회 전자에 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

나는 생각한다 마침내 당신이 달성하려고하는 것을 얻을 : 사용자가 텍스트가 삭제되어야하는 정보를 uid에 있지만 사용자가 다시 스피너를 초점을 맞출 때 다음은 오늘 날짜를 표시해야 할 때마다. 맞지 않아?

그렇다면 JSpinnerMouseListener을 사용하지 말고 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

관련 문제