2009-03-04 6 views
3

정수 변수에 바인딩 된 텍스트 필드가 있으므로 사용자가이 필드에 숫자를 입력하면 바인딩 메커니즘이 자동으로 텍스트를 Integer로 변환하고이 값을 var로 설정합니다. 문제는 사용자가 텍스트를 텍스트 필드에 입력했기 때문에 해당 바인딩 메커니즘은 값만 변환하고 사용자가 일부 문자를 입력하면 텍스트 필드 내에 올바른 값이 없으므로 바인딩이 활성화되지 않습니다. 그런 상황에서 바인딩이 null 값으로 변경을 트리거해야하므로 Integer var에 null이 있습니다.자바 바인딩 JTextField -> java.lang.Integer 문제

따라서 사용자가이 필드를 비워 두거나 숫자가 아닌 것을 남겨두면 바인딩은 null 값 전달을 트리거해야합니다. 이벤트를 무시하지 않기 위해 ... 텍스트 필드에 이벤트를 프로그래밍하지 않고 어떻게이 작업을 수행 할 수 있습니까?

자바 바인딩은 기본 동작을 변경할 수 있습니까?

답변

0

바인딩 메커니즘의 동작을 변경하는 것 외에도 숫자 만 허용하는 TextField에 Formatter를 넣을 수 있습니다. 이를 위해 javax.swing.text.DefaultFormatter를 확장해야합니다. 그리고 나서 일반 JTextField 대신 JFormattedTextField를 사용합니다.

결과는 텍스트 필드에 유효한 입력 값만 표시되며 잘못된 값을 벗어날 필요가 없습니다.

+0

사용자가 텍스트 필드에서 마지막 문자를 삭제할 때까지 작동합니다. Integer는 마지막 법적 상태로 유지되며 null이 아닙니다. –

1

제한된 텍스트 입력에 대한 스윙 지원이 쉽지 않습니다. JFormattedTextField은 완전히 비참한 사용자 환경을 제공합니다. 가장 흥미로운 스윙 작업과 마찬가지로 JComponent을 무시하고 모델을 찾아갑니다. 이 경우 Document, 특히 DocumentFilter입니다.

이전에 준비한 정수로 제한된 텍스트 필드를 사용하는 간단한 Swing 응용 프로그램이 있습니다. Description.Source (특히 createNumberDocument 참조).