문제

정수 변수에 묶인 텍스트 필드가 있으므로 사용자 가이 필드에 숫자를 입력하면 바인딩 메커니즘은 자동으로 텍스트를 정수로 변환 하고이 값을 Var로 설정합니다. 문제는 사용자 유형 텍스트 텍스트 필드로 텍스트 필드로 텍스트가 값 만 변환되므로 텍스트 필드 내부에 법적 값이 없기 때문에 사용자가 값 만 변환하고 사용자가 일부 문자를 입력하면 바인딩이 활성화되지 않습니다. 그러한 상황에서 필요한 것은 바인딩이 널 값으로 변화를 유발해야하므로 정수 var에 널이 있습니다.

따라서 사용자 가이 필드를 비워 두거나 숫자가 아닌 것을두면 바인딩은 널 값 전파를 유발해야합니다. 이벤트를 무시하지 말고 ... 텍스트 필드에서 이벤트가 없으면 어떻게 할 수 있습니까?

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

도움이 되었습니까?

해결책

바인딩 메커니즘의 동작을 변경하는 것 외에도, 숫자 만 받아들이는 텍스트 필드에 포피터를 넣을 수 있습니다. javax.swing.text.defaultformatter를 확장해야합니다. 그런 다음 일반적인 jtextfield 대신 jformattedTextField를 사용합니다.

결과는 텍스트 필드에서 유효한 입력 만 받고 잘못된 값에서 아무것도 만들 필요가 없다는 것입니다.

다른 팁

당신이 필요로하는 것은 JFormattedTextField 그리고 숫자.

제한된 텍스트 입력에 대한 스윙 지원이 끔찍합니다. JFormattedTextField 당신에게 완전히 비참한 사용자 경험을 줄 것입니다. 가장 흥미로운 스윙 작업과 마찬가지로 무시하십시오 JComponent 그리고 모델로 가십시오. 이 경우 Document, 특히 DocumentFilter.

그것이 일어나기 때문에 이전에 준비한 정수로 제한된 텍스트 필드를 사용하는 간단한 스윙 애플리케이션이 있습니다. 설명. 원천 (특히 createNumberDocument).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top