2014-09-15 6 views
1

하나의 열에 통화 금액이있는 테이블이 있습니다. 어려움은 각 행이 다른 통화를 가질 수 있다는 것입니다. stopCellEditing에서 유효하게 작동하는 기본 셀 편집기를 설정했습니다. 데이터가 유효하지 않은 경우 편집기가 중지되지 않지만 유효하지 않은 데이터를 셀에 두지 않고 값을 원래 값으로 되돌립니다. Focus Lost 동작을 설정했습니다.입력기 셀 편집기

ftf.setFocusLostBehavior (JFormattedTextField.PERSIST);

I 셀 에디터 (Specifying Formatters and Using Formatter Factories 참조)에 대한 예를 살펴 보았다 그것은 정수 형식을 사용하기 때문에 작동 :

 //Set up the editor for the integer cells. 
    integerFormat = NumberFormat.getIntegerInstance(); 
    NumberFormatter intFormatter = new NumberFormatter(integerFormat); 
    intFormatter.setFormat(integerFormat); 
    intFormatter.setMinimum(minimum); 
    intFormatter.setMaximum(maximum); 

    ftf.setFormatterFactory(
      new DefaultFormatterFactory(intFormatter)); 
    ftf.setValue(minimum); 
    ftf.setHorizontalAlignment(JTextField.TRAILING); 
    ftf.setFocusLostBehavior(JFormattedTextField.PERSIST); 

이 형식 공장이 너무 stopCellEditing가 호출 JFormattedTextField로 내 거짓 isEditValid =으로 설정을 이미 isEditValid를 false로 설정했습니다. 내 테이블에서는 포매터를 사용할 수 없기 때문에 isEditValid는 stopCellEditor에 도착하면 true입니다. 이 작업을 수행하는 유일한 방법은 필드에서 InputVerifier를 사용하는 것입니다.

질문 : 테이블 셀에 InputVerifier를 사용할 수 있습니까?

Formatter에서 stringToValue 및 valueToString을 재정의하려고 시도했지만 행의 통화 세부 정보에 대한 액세스 권한이 없습니다. InputVerifier를 사용하면 통화 정보가 추가 된 JFormattedTextField의 하위 클래스 인 셀의 원래 필드에 액세스 할 수 있습니다.

나는 이것이 의미가 있기를 바랍니다.

+0

super (StopCellEditing())에 의해 stopCellEditing 다음에 inputverifier를 호출하면 호출됩니다. 이 전에 필드를 검증해야합니다. – Mikerb

+0

가용 [복제] (http://stackoverflow.com/q/7531513/230513). – trashgod

+0

아닙니다.이 부분은 약간 더 깊습니다. 테이블 셀은 문자열로 정의되므로 사용자가 입력하는 동안 실제 오류를 검사하지 않습니다. 포커스가 없어지고 stopCellEditor 메소드가 호출되면 isEditValid 플래그가 true로 설정됩니다. 이 메서드에서 필요한 유효성 검사를 수행하고 오류가 있으면 false를 반환합니다. 셀은 내가 요청한대로 PERSISTED가 아닌 REVERTED됩니다. 내가 묻는 것은 isEditValid를 false로 설정할 수 있도록 셀 편집을 가로채는 방법이 있습니까? 나는 사용자 정의 포매터를 작성할 수 있지만 눌려진 모든 키에 대해 호출됩니다. 어떤 제안? – Mikerb

답변

1

getText 대신 getValue를 사용하여 FormattedTextString의 유효성을 검사 할 때 문제가 발생했습니다. 값은 새 데이터를 입력하기 전에 원래 값으로 설정됩니다. 텍스트가 새 값으로 설정됩니다. 이것이 일단 변경되면 예상대로 작동했습니다.

향후 참조를 위해 테이블 ​​내의 FormattedTextField의 InputVerifier는 셀 처리가 발생할 때까지 호출되지 않으므로 테이블 셀 유효성 검사에 사용할 수 없습니다.