private final static Color DEFAULT_BACKGROUND=Color.gray; private final static Color DEFAULT_FOREGROUND=Color.black; private final static Font DEFAULT_FONT=new Font("monospaced",Font.PLAIN,12); private final static int HEIGHT=Integer.MAX_VALUE-1000000; private final static int MARGIN=5; private FontMetrics fontMetrics; private int lineHeight; private int currentRowWidth; private JComponent component; private int componentFontHeight; private int componentFontAscent; public LineNumber(JComponent component)
int lineHeight=getLinerteight(); int startOffset=getStartOffset(); Rectangle drawHere=g.getClipBounds(); g.setColor(getBackground()); g.fillRect(drawHere.x,drawHere.y,drawHere.width.drawHere.height); g.setColor(getForeground()); int startLineNumber=(drawHere.y/lineHeight)+1; int endLineNumber=startLineNumber+(drawHere.height/lineHeight); int start=(drawHere.y/lineHeight)*lineHeight+startOffset; for(int i=startLineNumber;i<=endLineNumber;i++)
String lineNumber=String.valueOf(i); int width=fontMetrics.stringWidth(lineNumber); g.drawstring(lineNumber,MARGIN+currentRowWidth-width,start); start+=lineHeight;