2009-07-24 38 views
6

Tôi hiện đang cố gắng giải quyết vấn đề mà tôi cần tìm vị trí trong một đoạn văn bản trong JEditorPane dựa trên vị trí của chuột đã nhấp.Cách chuyển đổi từ vị trí chuột sang vị trí ký tự trong JEditorPane trong Java Swing

Về cơ bản, khi người dùng nhấp chuột phải vào một từ, tôi cần tìm hiểu từ đó là gì. Để làm điều này tôi cần phải tìm ra vị trí nào trong văn bản mà người dùng đã nhấp vào. Tôi biết tôi có thể dễ dàng có được vị trí chuột từ MouseEvent được truyền vào phương thức mousePress, và tôi nói rằng bạn có thể chuyển đổi nó để lấy chỉ mục ký tự trong đoạn văn bản - tuy nhiên tôi không thể tìm ra cách làm điều này.

Tôi đã thử phương thức viewToModel() trên JEditorPane tuy nhiên điều này cho tôi trở lại vị trí sai trong văn bản để tôi đang sử dụng sai hoặc không hoạt động theo cách này.

Bất kỳ ý tưởng nào?

Trả lời

9

Gọi viewToModel() là cách chính xác để làm điều này:

public void mouseClicked(MouseEvent e) { 
    JEditorPane editor = (JEditorPane) e.getSource(); 
    Point pt = new Point(e.getX(), e.getY()); 
    int pos = editor.viewToModel(pt); 
    // whatever you need to do here 
} 
+0

Cảm ơn, tôi đã đặt câu trả lời của bạn là câu trả lời được chấp nhận, như bạn sẽ thấy từ câu trả lời của tôi dưới đây gần như chính xác những gì tôi đã làm. – Scottm

+0

@ ChssPly76 Điều này bằng cách nào đó có thể được sử dụng cho một JTable thay thế? – Igor

+0

Phương thức viewToModel() đã được cung cấp bởi lớp JTextComponent tổng quát hơn. Đối với một JTable có những phương pháp khác mà trước tiên sẽ trả lại các tế bào, và sau đó một trong những sẽ cần phải gọi một phương pháp thích hợp tùy thuộc vào Cell renderer/biên tập viên. –

0

Tôi đã giải quyết vấn đề này một mình. Nó chỉ ra viewToModel() là chính xác những gì tôi nên sử dụng ở đây, vấn đề là tôi đã đi sai Point với nó.

Từ MouseEvent, tôi đã sử dụng phương thức getLocationOnScreen() để tìm ra điểm khi thực tế tôi nên sử dụng phương thức getPoint().

Nhờ bất kỳ ai đọc câu hỏi này.

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