JTextField 컨트롤에서 사용자 입력을 양의 정수로 제한하는 것은 프로그래밍에서 일반적인 문제였습니다. 이 목적으로 KeyListener를 활용하려고 시도했지만 더 효과적인 접근 방식이 있습니다.
KeyListener에 의존하는 것과 달리 DocumentFilter를 구현하면 다음과 같은 몇 가지 장점이 있습니다.
DocumentFilter를 사용하여 이를 구현하려면 다음을 고려하세요. 예:
import javax.swing.text.PlainDocument; import javax.swing.text.DocumentFilter; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; class IntDocumentFilter extends PlainDocument { @Override public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { if (string == null || string.isEmpty()) { super.insertString(fb, offset, string, attr); } else { try { Integer.parseInt(string); super.insertString(fb, offset, string, attr); } catch (NumberFormatException e) { // warn the user and don't allow the insert } } } @Override public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { if (text == null || text.isEmpty()) { super.replace(fb, offset, length, text, attrs); } else { try { Integer.parseInt(text); super.replace(fb, offset, length, text, attrs); } catch (NumberFormatException e) { // warn the user and don't allow the insert } } } }
이 필터를 사용하려면 이를 인스턴스화하고 JTextField와 연관된 PlainDocument 객체에 설정합니다.
JTextField textField = new JTextField(); PlainDocument doc = (PlainDocument) textField.getDocument(); doc.setDocumentFilter(new IntDocumentFilter());
이 구현:
이 기술을 사용하면 다음을 보장할 수 있습니다. 입력은 원하는 제약 조건을 따르므로 JTextField에서 허용하는 데이터 유형을 제어할 수 있습니다.
위 내용은 JTextField 입력을 정수로만 효과적으로 제한하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!