2012-06-13 49 views
6

Có phương pháp nào để trả về vị trí của ký tự trong JTextField hay không. Những gì tôi có nghĩa là bởi vì nếu tôi có một JTextField với một số giá trị trong đó. Ví dụ: trường chứa giá trị ABCDEFJ. Người dùng quyết định đặt con trỏ ngay sau ký tự 'C' để nhập một giá trị mới. Có phương pháp nào để có được vị trí nơi anh ấy nhập ký tự mới không. Trong ví dụ này, đó sẽ trả về một 3.Tìm vị trí văn bản con trỏ trong JTextField

+0

Trường hợp sử dụng thực tế ở đây là gì? Nó trông giống như một 'JSpinner' (hoặc có lẽ là một JComboBox' có thể chỉnh sửa) sẽ là một thành phần tốt hơn để sử dụng. –

+0

Đây không phải là một câu hỏi hay vì bạn đang yêu cầu một giải pháp mã cụ thể thay vì cách thực hiện hành vi. Giải pháp thực tế cho hành vi mong muốn của bạn có thể liên quan đến một cách tiếp cận hoàn toàn khác. Ví dụ, nếu bạn đang cố gắng kiểm tra đầu vào của JTextField trước khi nó hoàn thành, thì có lẽ những gì bạn thực sự muốn sử dụng là một DocumentFilter. Vì vậy, trong tương lai, xin vui lòng cho chúng tôi biết thêm về vấn đề tổng thể mà bạn muốn giải quyết, và ít hơn về cách cụ thể bạn đang cố gắng giải quyết nó. –

Trả lời

13

JTextField.getCaretPosition()

JTextField.setCaretPosition(int pos)

+0

Cảm ơn bạn. Điều này thật đúng với gì mà tôi đã tìm kiếm. – tadpole

+0

Có phương pháp trực tiếp nào hơn không - Giống như đặt vị trí thành văn bản bù trừ từ đầu chuỗi? – will

+0

như thế này? 'JTextField.setCaretPosition (anyPrecalculatedOffset)' – alaster

2

Hãy thử lấy sử dụng CaretListener giao diện:

public class A extends JFrame implements CaretListener 
{ 
    //Assume you have a text field. 
    public A() 
    { 
    JTextField field = new JTextField("bla bla"); 
    field.addCaretListener(this); 
    ..... 
    } 

    public void caretUpdate(CaretEvent e) 
    {   
    int index = e.getDot(); 
    ..... 
    } 
} 

getDot() phương pháp CaretEvent lớp trả về kết quả mà bạn mong muốn, bạn có thể gán nó vào một biến toàn cầu để sử dụng sau trên.