2011-12-05 28 views
9

Vì vậy, như bạn có thể biết, nếu bạn có một trường văn bản và bạn thêm một ActionListener vào nó, nó sẽ chỉ nghe bấm phím của nút nhập. Tuy nhiên, tôi muốn để ActionListener của tôi lắng nghe những thay đổi trong văn bản của. Vì vậy, về cơ bản tôi đã có điều này:Hãy để ActionListener lắng nghe sự thay đổi trong JTextField thay vì chỉ nhập?

public static JPanel mainPanel() { 
    JPanel mainp = new JPanel(); 
    JTextArea areap = new JTextArea("Some text in the textarea"); 
    JTextField fieldp = new JTextField("Edit this"); 
    areap.setEditable(false); 
    fieldp.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 
      if(//change in textfield, for instance a letterpress or space bar) 
        { 
         //Do this 
        } 
     } 
    }); 
    mainp.add(areap); 
    mainp.add(fieldp); 
    return mainp; 
} 

Bất kỳ cách nào tôi có thể nghe những thay đổi trong văn bản (như được ghi lại trong sự kiện actionPerformed)?

+1

thể trùng lặp của.! [đu: Listener thích hợp cho các sự kiện thay đổi JTextField] (http://stackoverflow.com/ que stions/2165071/swing-thích-listener-cho-jtextfield-change-events) – duffymo

Trả lời

21

Từ một câu trả lời bằng cách @JRL


Sử dụng các tài liệu cơ bản:

myTextField.getDocument().addDocumentListener(); 
+1

Còn về PropertyChangeEvent thì sao? – joshreesjones

2

Yeah, nhưng một người biết lắng nghe tài liệu là gì và làm thế nào để bạn sử dụng nó? Bạn không thực sự trả lời câu hỏi.

Tôi có JTextField trong giao diện người dùng của ứng dụng. Khi người dùng thực hiện bất kỳ thay đổi nào, tôi muốn một JCheckBox gần đó được kiểm tra. Mục đích là để cho ứng dụng biết SỬ DỤNG giá trị đã được nhập. Người dùng thường nhập giá trị ở đó nhưng nếu họ không rõ ràng yêu cầu ứng dụng sử dụng nó thì ứng dụng sẽ tiếp tục bỏ qua nó. Thay vì "đào tạo" người dùng tôi phải tuân theo nguyên tắc ít ngạc nhiên nhất và tự động kiểm tra hộp "Sử dụng giá trị này".

Nhưng làm cách nào để nghe thay đổi? Các bạn không thể nói cho tôi một cách dễ dàng, thay vì "giáo dục tôi" về người nghe tài liệu?

+0

Khi tôi hỏi câu hỏi này tôi đã ngụ ý rằng tôi biết cách một ActionListener làm việc, do đó tôi cũng nên biết làm thế nào (để tìm ra cách) một DocumentListener hoạt động. Câu trả lời là quá đủ. Bạn thêm DocumentListener vào tài liệu của JTextField như đã đề cập, và bạn có thể kiểm tra API Javadocs cho những chức năng mà người nghe cụ thể có. – ZimZim

+0

có thể bạn có thể lấy ý tưởng từ http://www.coderanch.com/t/610054/GUI/java/Add-DocumentListener-validate-multiple-JTextFields –

0

Tài liệu là cơ chế java swing sử dụng để lưu trữ văn bản bên trong JTextField. DocumentListeners là các đối tượng thực hiện giao diện DocumentListener và do đó làm cho bạn có thể liệt kê các thay đổi trong tài liệu, tức là các thay đổi trong văn bản của JTextField.

Để sử dụng các khả năng của tài liệu và trình tạo tài liệu, như đề xuất ở trên, hãy mở rộng lớp của bạn (có thể nhưng không nhất thiết phải là JFrame) để nó triển khai giao diện DocumentListener. FYI, giao diện DocumentListener có ba phương thức, một để chèn ký tự (vào trường văn bản), một để loại bỏ các ký tự, và một cho Bạn sẽ muốn thực hiện hai thuộc tính đầu tiên khi chúng được gọi khi các ký tự được thêm vào (ký tự đầu tiên) hoặc bị xóa (văn bản thứ hai). Để có được văn bản đã thay đổi, bạn có thể yêu cầu tài liệu cho văn bản, hoặc đơn giản hơn gọi myTextField.getText()

C'est tout

Phil Troy

+0

Vui lòng xem điều này trước: [trả lời] (https: // stackoverflow.com/help/answering) và [cách thực hiện để trả lời] (https://stackoverflow.com/help/how-to-answer) –

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