2012-04-03 10 views
2

ユーザーがテキストフィールドに入力できる文字を制限します。 0または1の8桁のみを受け入れるようにJFormattedTextFieldを制限する方法を教えてください。JFormattedTextFieldは0または1に制限されます

+0

も参照してください。この[Q&A](のhttp:// 9895383/230513)。 – trashgod

答えて

5

多分あなたの原因を助けるためにJFormattedTextField

サンプルプログラムを使用するためにそこに必要とされていないJTextFieldためのパターンで使用DocumentFilter、:

import java.awt.Toolkit; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.text.AbstractDocument; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DocumentFilter; 

public class TextFieldLimit 
{ 
    private void createAndDisplayGUI() 
    { 
     JFrame frame = new JFrame("JTextField Limit"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setLocationByPlatform(true); 

     JPanel contentPane = new JPanel(); 

     JTextField tfield = new JTextField(10); 
     /* 
     * Here we are using Document Filter 
     * to specify the size of the content 
     * i.e. 8 in your case. 
     */ 
     ((AbstractDocument)tfield.getDocument()).setDocumentFilter(
             new DocumentLimitAndInput(8)); 

     contentPane.add(tfield); 

     frame.getContentPane().add(contentPane); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new TextFieldLimit().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

class DocumentLimitAndInput extends DocumentFilter 
{ 
    private int maxCharacters; 

    public DocumentLimitAndInput(int size) 
    { 
     maxCharacters = size; 
    } 

    public void insertString(FilterBypass fb, int offset 
           , String text, AttributeSet aset) 
             throws BadLocationException 
    { 
     int size = fb.getDocument().getLength() + text.length(); 
     /* 
     * If the size is less than or equal to the permissible value 
     * and the input character is either 0 or 1, only in that 
     * case we will allow it to go through, else a BEEP 
     * sound is what a user will hear :-) 
     */ 
     if (size <= maxCharacters && (text.equals("0") || text.equals("1"))) 
      super.insertString(fb, offset, text, aset); 
     else 
      Toolkit.getDefaultToolkit().beep(); 
    } 

    public void replace(FilterBypass fb, int offset, int length 
           , String text, AttributeSet aset) 
             throws BadLocationException 
    { 
     int size = fb.getDocument().getLength() + text.length(); 
     /* 
     * If the size is less than or equal to the permissible value 
     * and the input character is either 0 or 1, only in that 
     * case we will allow it to go through, else a BEEP 
     * sound is what a user will hear :-) 
     */ 
     if (size <= maxCharacters && (text.equals("0") || text.equals("1"))) 
      super.replace(fb, offset, length, text, aset); 
     else 
      Toolkit.getDefaultToolkit().beep(); 
    } 
} 
+0

+1、 'DocumentFilter'で簡単に達成できるときに' JFormattedTextField'に頼る理由: –

+0

私の編集のために私を赦してください、ちょっと手伝ってもらえませんでした:-) –

+0

それは動作します。お返事ありがとうございます – Sachindra

関連する問題