2012-10-25 31 views
5

Tôi đang cố giới hạn độ dài tối đa của ký tự mà người dùng có thể nhập vào một trường văn bản nhưng có vẻ như không hoạt động.Giới hạn độ dài đầu vào trong JTextField không hoạt động

Đây là mã:

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

Có điều gì tôi đang làm sai? Làm thế nào tôi có thể làm cho giới hạn hoạt động bình thường?

Trả lời

9

Các constructor

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

đặt số cột hiển thị tới 8 nhưng không hạn chế bạn nhập hơn.

Bạn có thể sử dụng DocumentFilter để hạn chế độ dài đầu vào.

+1

Bạn có thể tìm thấy ví dụ tốt về cách thực hiện việc này tại đây (http://www.java2s.com/Tutorial/Java/0240__Swing/LimitJTextFieldinputtoamaximumlength.htm). – Designpattern

10

Mã hiện tại của bạn không đặt độ dài tối đa, thay vào đó là xác định số cột hiển thị.

Để hạn chế độ dài tối đa của dữ liệu, bạn có thể đặt tùy chỉnh Document cho trường text mà không cho phép bổ sung mà phá vỡ những hạn chế chiều dài tối đa:

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); 
    } 
    } 
} 

Sau đó thiết lập trường văn bản của bạn để sử dụng này tài liệu:

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

Đơn giản chỉ cần mở rộng các lớp JTextField và ghi đè lên các sự kiện KeyReleased trong các nhà xây dựng và trỏ nó vào một phương pháp mới để kiểm tra độ dài:

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

Tôi chắc chắn điều này sẽ giúp bạn. Tôi vừa thêm một số KeyListener thuộc loại keyTyped vào số JTextField. KeyListener hoạt động khi người dùng nhập ký tự vượt quá giới hạn đã xác định trong câu hỏi if.

text2 = new JTextField("Enter text here",8); 
text2.addKeyListener(new KeyAdapter() { 
     public void keyTyped(KeyEvent e) { 
      if (text2.getText().length() == 8) { 
       e.consume(); 
      } 
     } 
    }); 
Các vấn đề liên quan