2008-12-30 30 views

Trả lời

8

Đây có lẽ không phải là cách tối ưu (và nó được một lúc), nhưng trong quá khứ, tôi đã thêm một DocumentListener cho JTextField và trên bất kỳ sự kiện (chèn, cập nhật, xóa) I:

evt.getDocument().getLength() 

Trả về tổng chiều dài của nội dung của trường văn bản.

3

này có thể liên quan đến này "bug" (or rather "feature")

Các người nghe được thông báo về các sự kiện quan trọng trước khi xử lý chúng để cho phép người nghe để "ăn cắp" các sự kiện bằng cách tiêu thụ chúng. Điều này mang lại khả năng tương thích với khái niệm awt cũ hơn về các sự kiện tiêu thụ.
Sự kiện "đã nhập" không có nghĩa là văn bản đã được nhập vào thành phần. Đây KHÔNG phải là lỗi , đó là hành vi dự định.

Một giải pháp khả thi là để lắng nghe một associated Document

// Listen for changes in the text 
myTextField.getDocument().addDocumentListener(new DocumentListener() { 
    public void changedUpdate(DocumentEvent e) { 
    // text was changed 
} 
public void removeUpdate(DocumentEvent e) { 
    // text was deleted 
} 
public void insertUpdate(DocumentEvent e) { 
    // text was inserted 
} 
}); 

Lưu ý làm việc này không có vấn đề như thế nào nội dung được thay đổi; thông qua một clipboard cắt/dán, progamatic "setText()" trên TextField, hoặc người dùng gõ vào trường trên giao diện người dùng.

3

KeyEvent s là các sự kiện cấp thấp không phù hợp ở đây [nghe quen thuộc].

Hệ thống JTextField biết rằng ký tự đã được nhập như thế nào? Thông qua một sự kiện gõ phím (IIRC, được thực hiện thông qua PL & F). Sự kiện có được gửi đến người nghe hệ thống trước người nghe của bạn không? Nó có thể hoặc có thể không làm.

Trong trường hợp này, bạn có thể muốn truy cập vào số Document và thêm người nghe cấp cao hơn. Với Swing đó là một ý tưởng tốt để đi cho mô hình sớm - các giao diện lớp 'J' là không mạch lạc. Nếu bạn đang chặn dữ liệu đầu vào, thì có thể bạn muốn có một mô hình tùy chỉnh (hoặc trong trường hợp là Document a DocumentFilter).

2

Sử dụng mã này:

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt) 
{ 
    System.out.println(jTextField6.getText().length()); 
} 
+0

Hãy xem xét mở rộng câu trả lời của bạn để giải thích cho hỏi tại sao điều này đạt được kết quả mong muốn, có thể liên kết đến tài liệu. Như vậy, điều này chỉ hữu ích một chút. –

Các vấn đề liên quan