2009-07-24 10 views
6

Actualmente estoy tratando de resolver un problema donde necesito encontrar la posición en un texto en un JEditorPane en función de dónde estaba el mouse clickeadoCómo convertir desde una posición de mouse a una posición de carácter en un JEditorPane en Java Swing

Básicamente, cuando el usuario hace clic derecho sobre una palabra, necesito saber cuál es la palabra. Para hacer esto, necesito averiguar en qué posición del texto ha hecho clic el usuario. Sé que puedo obtener fácilmente la posición del mouse del MouseEvent que se pasa al método mousePressed, y me dicen que puede convertir esto para obtener el índice de caracteres en el texto, sin embargo, no puedo entender cómo hacerlo. esta.

He intentado con el método viewToModel() en JEditorPane, pero esto me está devolviendo la posición incorrecta en el texto, así que lo estoy usando mal o no funciona de esta manera.

¿Alguna idea?

Respuesta

9

Invocando viewToModel() es la forma correcta de hacer esto:

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

Gracias, he configurado su respuesta para que sea la aceptada, como verá en mi respuesta a continuación, esto es casi exactamente lo que he hecho. – Scottm

+0

@ ChssPly76 ¿Se puede usar esto de alguna manera para una JTable? – Igor

+0

El método viewToModel() ya lo proporciona la clase más general JTextComponent. Para una tabla JT hay otros métodos que devolverían primero la celda, y luego uno necesitaría llamar a un método apropiado dependiendo del editor/editor de celda. –

0

He resuelto este problema por mi cuenta. Resulta que viewToModel() es exactamente lo que debería usar aquí, el problema era que estaba pasando el punto incorrecto.

Desde MouseEvent, estaba usando el método getLocationOnScreen() para calcular el punto cuando, de hecho, debería haber estado usando el método getPoint().

Gracias a todos los que leyeron esta pregunta.

Cuestiones relacionadas