He encontrado esto, parece que funciona, voy a ver como lo adhiero al proyecto.
Código (java) [Seleccionar]
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.Document;
public class LineNr extends JPanel
{
JTextPane pane;
JScrollPane scrollPane;
public LineNr ()
{
super ();
setMinimumSize (new Dimension (30, 30));
setPreferredSize (new Dimension (30, 30));
setMinimumSize (new Dimension (30, 30));
pane = new JTextPane () // we need to override paint so that thelinenumbers stay in sync
{
public void paint (Graphics g)
{
super.paint (g);
LineNr.this.repaint ();
}
};
scrollPane = new JScrollPane (pane);
}
public void paint (Graphics g)
{
super.paint (g);
int start =
pane.viewToModel (scrollPane.getViewport ().getViewPosition ());
int end =
pane.
viewToModel (new
Point (scrollPane.getViewport ().getViewPosition ().x +
pane.getWidth (),
scrollPane.getViewport ().getViewPosition ().y +
pane.getHeight ()));
Document doc = pane.getDocument ();
int startline = doc.getDefaultRootElement ().getElementIndex (start);
int endline = doc.getDefaultRootElement ().getElementIndex (end);
int fontHeight = g.getFontMetrics (pane.getFont ()).getHeight (); // font
for (int line = startline, y = 0; line <= endline;
line++, y += fontHeight)
{
g.drawString (Integer.toString (line), 0, y);
}
}
public static void main (String[]args)
{
JFrame frame = new JFrame ();
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane ().setLayout (new BorderLayout ());
final LineNr nr = new LineNr ();
frame.getContentPane ().add (nr, BorderLayout.WEST);
frame.getContentPane ().add (nr.scrollPane, BorderLayout.CENTER);
frame.pack ();
frame.setSize (new Dimension (400, 400));
//frame.show();
frame.setVisible (true);
}