Example #1
0
  /**
   * Create a line number component for a text component.
   *
   * @param argComponent the related text component
   * @param argMinimumDisplayDigits the number of digits used to calculate the minimum width of the
   *     component.
   */
  public TextLineNumber(JTextComponent argComponent, int argMinimumDisplayDigits) {
    component = argComponent;

    setFont(argComponent.getFont());

    setBorderGap(5);
    setCurrentLineForeground(Color.RED);
    setDigitAlignment(RIGHT);
    setMinimumDisplayDigits(argMinimumDisplayDigits);

    argComponent.getDocument().addDocumentListener(this);
    argComponent.addCaretListener(this);
    argComponent.addPropertyChangeListener("font", this);
  }
 /*     */ public void paint(Graphics paramGraphics, Shape paramShape) /*     */ {
   /* 356 */ Rectangle localRectangle = (Rectangle) paramShape;
   /* 357 */ this.tabBase = localRectangle.x;
   /* 358 */ JTextComponent localJTextComponent = (JTextComponent) getContainer();
   /* 359 */ this.sel0 = localJTextComponent.getSelectionStart();
   /* 360 */ this.sel1 = localJTextComponent.getSelectionEnd();
   /* 361 */ this.unselected =
       (localJTextComponent.isEnabled()
           ? localJTextComponent.getForeground()
           : localJTextComponent.getDisabledTextColor());
   /*     */
   /* 363 */ Caret localCaret = localJTextComponent.getCaret();
   /* 364 */ this.selected =
       ((localCaret.isSelectionVisible()) && (localJTextComponent.getHighlighter() != null)
           ? localJTextComponent.getSelectedTextColor()
           : this.unselected);
   /*     */
   /* 366 */ paramGraphics.setFont(localJTextComponent.getFont());
   /*     */
   /* 369 */ super.paint(paramGraphics, paramShape);
   /*     */ }
Example #3
0
  /**
   * Draw the line numbers
   *
   * @param g
   */
  @Override
  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    ((Graphics2D) g)
        .setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    //	Determine the width of the space available to draw the line number

    FontMetrics fontMetrics = component.getFontMetrics(component.getFont());
    Insets insets = getInsets();
    int availableWidth = getSize().width - insets.left - insets.right;

    //  Determine the rows to draw within the clipped bounds.

    Rectangle clip = g.getClipBounds();
    int rowStartOffset = component.viewToModel(new Point(0, clip.y));
    int endOffset = component.viewToModel(new Point(0, clip.y + clip.height));

    while (rowStartOffset <= endOffset) {
      try {
        if (isCurrentLine(rowStartOffset)) g.setColor(getCurrentLineForeground());
        else g.setColor(getForeground());

        //  Get the line number as a string and then determine the
        //  "X" and "Y" offsets for drawing the string.

        String lineNumber = getTextLineNumber(rowStartOffset);
        int stringWidth = fontMetrics.stringWidth(lineNumber);
        int x = getOffsetX(availableWidth, stringWidth) + insets.left;
        int y = getOffsetY(rowStartOffset, fontMetrics);
        g.drawString(lineNumber, x, y);

        //  Move to the next row

        rowStartOffset = Utilities.getRowEnd(component, rowStartOffset) + 1;
      } catch (Exception e) {
        break;
      }
    }
  }