2012-10-25 40 views
5

Kullanıcının bir metin alanında girebileceği karakter uzunluğunu sınırlamaya çalışıyorum ama çalışmıyor gibi görünüyor.JTextField öğesindeki Giriş Sınırı çalışmıyor

text2 = new JTextField("Enter text here",8); 

yanlış yapıyorum bir şey var mı: İşte

kodudur? Sınırın düzgün çalışması için nasıl yapabilirim?

cevap

9

yapıcı

new JTextField("Enter text here",8); 

8 görünür sütun sayısını belirler ama daha girmenizi kısıtlamaz.

Giriş uzunluğunu kısıtlamak için DocumentFilter kullanabilirsiniz.

+1

Burada bu nasıl yapılacağı konusunda iyi bir örnek bulabilirsiniz (http://www.java2s.com/Tutorial/Java/0240__Swing/LimitJTextFieldinputtoamaximumlength.htm). – Designpattern

10

Geçerli kod, maksimum uzunluğu ayarlamıyor, bunun yerine görünen sütun sayısını tanımlar.

public final class LengthRestrictedDocument extends PlainDocument { 

    private final int limit; 

    public LengthRestrictedDocument(int limit) { 
    this.limit = limit; 
    } 

    @Override 
    public void insertString(int offs, String str, AttributeSet a) 
     throws BadLocationException { 
    if (str == null) 
     return; 

    if ((getLength() + str.length()) <= limit) { 
     super.insertString(offs, str, a); 
    } 
    } 
} 

O zaman bu kullanmak için metin alanını ayarlayın:

maksimum uzunluğu kısıtlaması kırmak eklemeler izin vermez metin alanı için özel bir Document ayarlayabilirsiniz, verilerin maksimum uzunluğu kısıtlamak için belge:

text2.setDocument(new LengthRestrictedDocument(8)); 
0

Basitçe JTextField Class genişletmek ve yapıcı içinde KeyReleased olay geçersiz kılmak ve uzunluğunu denetler yeni bir yöntem üzerinde işaret:

package gui; 

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JTextField; 

public class RecordClassTextField extends JTextField { 

    public RecordClassTextField() { 
     this.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyReleased(KeyEvent e) { 
       cleanText(); 
      } 
     }); 
    } 

    private void cleanText() 
    { 
     if(this.getText().length() > 17){ 
      System.out.println("Over 17"); 
     } 
    } 
} 
0

Bunun size yardımcı olacağından eminim. keyTyped türündeki KeyListener ürününü JTextField ürününe ekledim. KeyListener, kullanıcı if deyiminde tanımlanan sınırdan daha fazla karakter girdiğinde çalışır.

text2 = new JTextField("Enter text here",8); 
text2.addKeyListener(new KeyAdapter() { 
     public void keyTyped(KeyEvent e) { 
      if (text2.getText().length() == 8) { 
       e.consume(); 
      } 
     } 
    });