2011-09-01 28 views
8

Tôi có jFormattedTextField trong chương trình của mình và tôi cần cập nhật văn bản của jLabel khi giá trị jFormattedTextField đã được thay đổi hợp lệ.
Trên thực tế jFormattedTextField nhận được một số và jLabel hiển thị sự khác biệt giữa số này và một số khác.
Tôi hiện đang thực hiện việc này bằng cách lắng nghe sự kiện "FocusLost" của văn bản được định dạng jFormatted.đặt trình nghe "On Change" trên jFormattedTextField

Tôi làm cách nào để thực hiện việc này?

Trả lời

10

đăng ký một PropertyChangeListener cho "giá trị" tài sản cho formattedField

PropertyChangeListener l = new PropertyChangeListener() { 

     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 
      String text = evt.getNewValue() != null ? evt.getNewValue().toString() : ""; 
      label.setText(evt.getNewValue()); 
     } 
    }; 
    formattedTextField.addPropertyChangeListener("value", l); 

Không sử dụng DocumentListener cũng không FocusListener: cựu được thông báo quá thường xuyên (trên mỗi keytyped, trước khi phân tích đã xảy ra) sau này là quá giòn .

1

Có lẽ cách dễ nhất để thực hiện việc này là sử dụng một số javax.swing.event.DocumentListener mà bạn tùy ý đối với trường văn bản. Sau đó, khi người dùng nhập, nhãn có thể được cập nhật.

Tôi không nhớ chính xác trình tự, nhưng người nghe có thể gọi insertUpdate() trước khi trường văn bản được định dạng được xác thực. Vì vậy, bạn cũng có thể cần kiểm tra các số hợp lệ trong trình nghe của bạn.