2014-06-23 2 views
2

내 jtextfield가 0과 아래 코드 예제에 지정된 MAX 값 사이의 숫자 값만 허용하도록합니다.JTextfied에서 0과 8 사이의 숫자 값만 받아들이는 방법?

MAX 변수가 아래와 같이 설정되어 있다고합시다. 그럼 난 그저 0과 8 사이의 숫자 값을 입력 할 수 있기를 원합니다. 아래 코드 예제에서는 88, 77, 66 등을 입력 할 수 있습니다. 나는 그것이 0과 MAX 사이의 값만 허용하도록 어떻게 만들 수 있는지 전혀 모른다.

import javax.swing.*; 
import javax.swing.text.*; 

public class DocumentDemo extends JFrame { 
    public static void main(String[] args) { 
     new DocumentDemo(); 
    } 

    final int MAX = 8; 

    public DocumentDemo() { 
     this.setVisible(true); 
     JTextField textField = new JTextField(); 

     ((AbstractDocument)textField.getDocument()).setDocumentFilter(
       new DocumentFilter() { 

        @Override 
        public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
         int len = text.length(); 
         boolean isValidValue = true; 
         for(int i = 0; i < len; i++) { 
          if(!Character.isDigit(text.charAt(i))){ 
           isValidValue = false; 
          } 
         } 

         if(isValidValue && Integer.parseInt(text) > MAX) { 
          isValidValue = false; 
         } 

         if(isValidValue && fb.getDocument().getText(0, fb.getDocument().getLength()).length() > String.valueOf(MAX).length()) { 
          isValidValue = false; 
         } 

         if(isValidValue) { 
          super.replace(fb, offset, length, text, attrs); 
         } 
        } 
       } 
     ); 
     textField.setColumns(5); 
     this.add(textField); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
    } 
} 
+2

유효한 값이 너무 적기 때문에 JSpinner를 사용할 수 있습니다. –

+0

위의 값은 예제입니다. 12345 일 수도 있습니다. 그러나 나는 위의 예에서 낮은 가치를 선택했다. :-) – Rox

+0

''나는 그것을 만들 수있는 단서가 없으므로 0에서 MAX 사이의 값만 받아 들일 수 있습니다. "- 문서 필터 **가 ** 작동합니다. 위의 진술은 우리가 갇혀있는 곳을 파악하는 데 도움이되지 않습니다. 성명서에 구체적으로 기재하십시오. 내 이름과 DocumentFilter에서이 사이트를 검색하면이 사람들을 만드는 방법에 대한 예제가 있습니다. –

답변

5

JFormattedTextField 원하는대로 들리 죠.

NumberFormatter nf = new NumberFormatter(); 
nf.setMinimum(new Integer(0)); 
nf.setMaximum(new Integer(8)); 
JFormattedTextField field = new JFormattedTextField(nf); 

편집 : 당신은 또한 당신의 전반적인 필요에 따라 JSpinner 또는 DocumentFilter (with examples)를 사용할 수

+0

답장을 보내 주셔서 감사합니다. 하지만 내가 원하는 것은 사용자가 'MAX'값보다 큰 값을 입력하는 것을 금지하는 것입니다. – Rox

+0

최소/최대 설정을 표시하도록 변경된 예 – sevensevens

3

DocumentFilter이 추가 혜택을 제공 할 것이다 최대, 최소값을 설정하는 방법을 보여 주었다 필드에서 실시간으로 들어오는 콘텐츠를 필터링 할 수 있습니다.

관련 문제