2009-07-24 14 views
6

Aktualnie próbuję rozwiązać problem, w którym muszę znaleźć pozycję w tekście w JEditorPane na podstawie położenia myszy kliknięte.Jak przekonwertować z pozycji myszy na pozycję znaku w JEditorPane w Java Swing

Zasadniczo, gdy użytkownik kliknie prawym przyciskiem myszy na słowo, muszę się dowiedzieć, jakie jest to słowo. Aby to zrobić, muszę się dowiedzieć, w której pozycji w tekście kliknął użytkownik. Wiem, że mogę łatwo uzyskać pozycję myszy z MouseEvent, która jest przekazywana do metody mousePressed, i powiedziano mi, że możesz ją przekonwertować, aby uzyskać indeks znaków w tekście - jednak nie mogę wymyślić, jak to zrobić to.

Próbowałem metody viewToModel() na JEditorPane, ale to daje mi z powrotem niewłaściwą pozycję w tekście, więc albo używam go źle lub nie działa w ten sposób.

Wszelkie pomysły?

Odpowiedz

9

Wywoływanie viewToModel() jest poprawny sposób to zrobić:

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

Dzięki, ustawiłem twoją odpowiedź na akceptowaną, jak zobaczysz z mojej odpowiedzi poniżej, to prawie dokładnie to, co zrobiłem. – Scottm

+0

@ ChssPly76 Czy można to w jakiś sposób wykorzystać do ustawienia JTable? – Igor

+0

Metoda viewToModel() jest już dostarczona przez bardziej ogólną klasę JTextComponent. W przypadku JTable istnieją inne metody, które najpierw zwrócą komórkę, a następnie trzeba będzie wywołać odpowiednią metodę w zależności od renderera komórek/edytora. –

0

ja rozwiązał ten problem na własną rękę. Okazuje się, że viewToModel() jest dokładnie tym, czego powinienem używać tutaj, problemem było to, że przechodziłem w niewłaściwym punkcie do niego.

Z MouseEvent użyłem metody getLocationOnScreen() do określenia punktu, w którym powinienem był używać metody getPoint().

Dziękuję wszystkim, którzy przeczytali to pytanie.

Powiązane problemy