2012-10-01 5 views
1

integer, float, stringdate의 4 가지 형식을 허용하는 입력란이 필요합니다. 사용자가 날짜 입력을 요구하면 UI는 날짜 선택 도구를 표시합니다. JXDatePicker의 동적 JFormattedTextField

그래서 나는 그것의 편집기로 JFormattedTextfieldJXDatePicker을 만든 단일 텍스트 필드를 동적으로 Integer, Float, StringDate 입력을 처리 할 수있는 JFormattedTextfield의 포맷 공장을 할당 할 UI를 단순화합니다. 구현의 코드는 다음과 같은 :

public void setFormat(String format) 
    { 
    // requires integer format 
    if (IntegerAttribute.TYPE_NAME.equals(format)) { 
     setBoundFormatFactory(new DefaultFormatterFactory(new NumberFormatter(NumberFormat.getInstance()))); 
    } 
    // requires float format 
    else if (FloatAttribute.TYPE_NAME.equals(format)) { 
     setBoundFormatFactory(new DefaultFormatterFactory(new NumberFormatter(new DecimalFormat(FLOAT_FORMAT)))); 
    } 
    else if (DateAttribute.TYPE_NAME.equals(format) 
      || DateTimeAttribute.TYPE_NAME.equals(format) 
      || TimeAttribute.TYPE_NAME.equals(format)) { 
     // requires date format 
     setDateFormat(model.getDateFormat()); 
    } 
    else { 
     // otherwise set to us string 
     setBoundFormatFactory(new DefaultFormatterFactory()); 
    } 
    } 

    public void setDateFormat(String dateFormat) 
    { 
    setBoundFormatFactory(new DefaultFormatterFactory(new DateFormatter(new SimpleDateFormat(dateFormat)))); 
    } 

    private void setBoundFormatFactory(DefaultFormatterFactory factory) 
    { 
    m_formattedTextfield.setFormatterFactory(factory); 
    } 
구현 따라서 정수를위한 그러나 문자열 및 날짜 형식에 대해 작동하며 JXDatePicker는 날짜 데이터 형식으로 캐스팅하려고하는 것 같다 수레와

클래스 캐스트 원인 예외 :

java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.Date 
at org.jdesktop.swingx.plaf.basic.BasicDatePickerUI$Handler.editorPropertyChange(BasicDatePickerUI.java:1359) 
at org.jdesktop.swingx.plaf.basic.BasicDatePickerUI$Handler.propertyChange(BasicDatePickerUI.java:1336) 
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:339) 
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:276) 
at java.awt.Component.firePropertyChange(Component.java:8163) 
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:782) 
at javax.swing.JFormattedTextField.commitEdit(JFormattedTextField.java:513) 

날짜 선택 도구가 필드가 숫자 형식 일 때 값을 캐스팅하지 못하도록하는 방법이 있습니까? 또는 다른 해결 방법이 있습니까?

+0

당신이 달성하려고하는 것을 이해하지 못합니다. JXDatePicker는 날짜를 처리하도록 설계되었지만 그 이상도 아무것도 없습니다 :-) – kleopatra

+0

당신은'int','float'을 처리 할 수있는 JFormattedTextField를 원합니다. '날짜'와'문자열'? –

+0

또한 정수와 부동 소수점의 차이를 어떻게 알 수 있습니까? 입력에'.' –

답변

1
  • JXDatePicker

  • 당신은 어쩌면이 SpinnerDateModel 대신

  • JFormattedTextField의와 JSpinner을 사용할 수 있습니다 (I는, 지원은 DateFormat의 또는 SimpleDateFormat에 의해 Date value를 포맷 생각 모두 포매터를 동기화 할 필요가) 사용되지 않습니다 JCalendar by Kai Toedter을보고 코드 소스를 사용하십시오.

+0

JXDatePicker는 프로젝트의 다른 곳에서 사용되므로 일관성있는 UI를 유지하려면 사용해야합니다. 스피너는 날짜 처리를 위해 작동하지만 문자열에 어떻게 사용할 수 있는지 잘 모르겠습니다. – Foo