2012-06-26 6 views
3

나는 12시와 같이 사용자가 시간을 입력하기를 원하지만 몇 가지를 알아 내야하고 나는 사악하다.jtextfield에 콜론을 넣어 제거 할 수 있습니까?

  1. 텍스트를 5 자로 제한 할 수 있습니까?
  2. 사용자가 코드를 삭제할 수 없도록 코드에 콜론을 삽입 할 수 있습니까?
  3. 마지막으로, 내가 그 코드를 가지고 그것 (물론 콜론을 무시)의 숫자 만 있는지 확인할 수 있습니다
+4

사용 같을 수있다 [JFormattedTextField의 (http://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField. html) 및 [MaskFormatter] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/MaskFormatter.html)를 참조하십시오. –

답변

7

대답은 JFormattedTextFieldMaskFormatter를 사용하는 것입니다. 예를 들어

:

String mask = "##:##"; 
MaskFormatter timeFormatter = new MaskFormatter(mask); 
JFormattedTextField formattedField = new JFormattedTextField(timeFormatter); 

자바 컴파일러는 당신이 잡을 또는 않는 MaskFormatter를 만들 때 ParseException가 던져 때문에 반드시 이렇게해야합니다.

+0

나는이 일을 할 수 없었다. 마스크 포맷터와 텍스트 필드는 예외를 throw하기 전에 10 자까지 허용하며 여전히 나를 사용할 수 없습니다. public void textformat() { MaskFormatter mask = null; { 마스크 = 새 MaskFormatter ("## : ##"); mask.setPlaceholderCharacter (':'); } catch (ParseException e) { e.printStackTrace(); } JFormattedTextField sunb = new JFormattedTextField (마스크); jFormattedTextField1 = sunb; } – rdemolish

2

텍스트 필드를 버리고 두 개의 JSpinner 인스턴스를 콜론이 포함 된 JLabel (또는 두 개의 JTextField 인스턴스)으로 구분하여 선택하십시오.

이 솔루션이 사용자에게 더 직관적 일지는 확실하지 않지만 그렇게 생각합니다.

0

오래된 질문에 대한 늦은 대답; DocumentFilter을 사용하면 그 세 가지를 달성 할 수 있습니다.

비 생산 품질 코드는

String TIME_PATTERN = "^\\d\\d:\\d\\d\\s[AP]M$"; 

final JTextField tf = new JTextField("00:00 AM", 8); 

((AbstractDocument)tf.getDocument()).setDocumentFilter(new DocumentFilter() { 
    public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a) throws BadLocationException { 

     String text = fb.getDocument().getText(0, fb.getDocument().getLength()); 

     text = text.substring(0, offs) + str + text.substring(offs + length); 

     if(text.matches(TIME_PATTERN)) { 
      super.replace(fb, offs, length, str, a); 
      return; 
     } 

     text = fb.getDocument().getText(0, fb.getDocument().getLength()); 

     if(offs == 2 || offs == 5) 
      tf.setCaretPosition(++offs); 

     if(length == 0 && (offs == 0 ||offs == 1 ||offs == 3 ||offs == 4 ||offs == 6)) 
      length = 1; 

     text = text.substring(0, offs) + str + text.substring(offs + length); 

     if(!text.matches(TIME_PATTERN)) 
      return; 

     super.replace(fb, offs, length, str, a); 

    } 

    public void insertString(FilterBypass fb, int offs, String str, AttributeSet a) throws BadLocationException { } 

    public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { } 

});