Cómo buscar el alto de una linea en el JTextPane

wpc
09 de Mayo del 2006
Estoy haciendo una aplicación con una traza; esta se posiciona al lado de la linea que se está analizando y necesito conocer su alto para darle tamaño a la imagen de la traza que el un JLabel.
Muchas Gracias.

wpc
09 de Mayo del 2006
myTextPane.getAccessibleContext().getAccessibleText().getCharacterBounds():
Devuelve un rectángulo que contiene las coordenadas (x,y) y su tamaño.
Aclarando primero que esta clase solo se usa cuando el JTextComponent está visualizado (no antes).
Para pintar la traza creo un panel que está al lado del JTextPane que le doy y para que la pinte en (0,y), a partir de las funciones:
public void paintNormalTraza(int y)
y
public void paintBackTraza(int y)

A continuación está el código de esta clase:
import java.awt.LayoutManager;
import java.awt.*;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
*
*/

/**
* @author Welkis Yasel Pérez Carrillo.
*
*/
public class JTrazaMarkPane extends JPanel {
/** Este ancho es el estandar del icono. */
int widthImage = 18;

/** Este es la y coordenada donde se va a ubicar la traza y su estado. */
TrazaState trazaState = new TrazaState();

// Iconos
private Image normalTraza;
private Image backTraza;

public JTrazaMarkPane()
{
super();
widthImage =loadIcon();
setBackground(java.awt.Color.white);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

//Dibujando la linea divisora de la marca y el texto.
g.setColor(Color.GRAY);
g.drawLine(getWidth()-1,0,getWidth()-1,getHeight());
showTraza(g);
}

public Dimension getMinimumSize()
{
Dimension dim = super.getMinimumSize();
dim.width = widthImage +1;
return dim;
}

public Dimension getPreferredSize()
{
Dimension dim = super.getPreferredSize();
dim.width = widthImage+1;
return dim;
}

public Dimension getMaximumSize()
{
Dimension dim = super.getPreferredSize();
dim.width = widthImage+1;
return dim;
}
/**
* Este método carga los iconos e imagenes que necesita la aplicación.
* Y devuelve el ancho de los iconos.
*
*/
private int loadIcon()
{
ImageIcon normalIcon = new ImageIcon(getClass().getResource("images/manoder.gif"));
ImageIcon backIcon = new ImageIcon(getClass().getResource("images/manoarr.gif"));

normalTraza = normalIcon.getImage();
backTraza = backIcon.getImage();

return normalIcon.getIconWidth();
}

public void paintNormalTraza(int y)
{
trazaState.putNormalTraza(y);
repaint();
}

public void paintBackTraza(int y)
{
trazaState.putBackTraza(y);
repaint();
}

/**
* @param Graphics g
*/
private void showTraza(Graphics g)
{
if (trazaState.getY()<0) return;

if (trazaState.isNormalTraza())
g.drawImage(normalTraza,0,trazaState.getY(),this);
else
g.drawImage(backTraza,0,trazaState.getY(),this);
}

public TrazaState getTraza()
{
return trazaState;
}


}

class TrazaState{
private int y;
private boolean isNormalTraza;
public TrazaState(){y=-1;}
public void putNormalTraza(int y)
{
isNormalTraza = true;
this.y =y;
}

public void putBackTraza(int y)
{
isNormalTraza = false;
this.y =y;
}

public boolean isNormalTraza()
{
return isNormalTraza;
}

public boolean isBackTraza()
{
return !isNormalTraza;
}

public int getY()
{
return y;
}
}