📄 numberedparagraphview.java
字号:
/* * FindBugs - Find Bugs in Java programs * Copyright (C) 2006, University of Maryland * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307, USA */package edu.umd.cs.findbugs.sourceViewer;import java.awt.Color;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.Shape;import java.util.WeakHashMap;import javax.swing.text.AttributeSet;import javax.swing.text.Element;import javax.swing.text.ParagraphView;import javax.swing.text.StyleConstants;import javax.swing.text.View;import edu.umd.cs.findbugs.gui2.Driver;// Code inspired by http://www.developer.com/java/other/article.php/3318421class NumberedParagraphView extends ParagraphView { public final static int NUMBERS_WIDTH= (int) Driver.getFontSize()*3+9; HighlightInformation highlight; public NumberedParagraphView(Element e, HighlightInformation highlight) { super(e); this.highlight = highlight; }// protected void setInsets(short top, short left, short bottom,// short right) {super.setInsets// (top,(short)(left+NUMBERS_WIDTH),// bottom,right);//} @Override public void paint(Graphics g, Shape allocation) { Rectangle r = (allocation instanceof Rectangle) ? (Rectangle)allocation : allocation.getBounds(); Color oldColor = g.getColor(); Integer lineNumber = getLineNumber(); Color highlightColor = highlight.getHighlight(lineNumber); if (highlightColor != null) { g.setColor(highlightColor); g.fillRect(r.x, r.y, r.width, r.height); g.setColor(oldColor); } // r.x += NUMBERS_WIDTH; super.paint(g, r); FontMetrics metrics = g.getFontMetrics(); g.setColor(Color.GRAY); String lineNumberString = lineNumber.toString(); int width = metrics.stringWidth(lineNumberString); int numberX = r.x - width-9 + NUMBERS_WIDTH; int numberY = r.y + metrics.getAscent(); g.drawString(lineNumberString, numberX, numberY); g.setColor(oldColor); // System.out.println("Drawing line for " + lineNumber + " @ " + numberX +"," + numberY); // r.x -= NUMBERS_WIDTH; } public int getPreviousLineCount0() { int lineCount = 0; View parent = this.getParent(); int count = parent.getViewCount(); for (int i = 0; i < count; i++) { if (parent.getView(i) == this) { break; } else { lineCount += parent.getView(i).getViewCount(); } } return lineCount; } static WeakHashMap<Element, Integer> elementLineNumberCache = new WeakHashMap<Element, Integer>(); public Integer getLineNumber() { Element element = this.getElement(); Integer result = elementLineNumberCache.get(element); if (result != null) return result; Element parent = element.getParentElement(); int count = parent.getElementCount(); for (int i = 0; i < count; i++) { elementLineNumberCache.put(parent.getElement(i), i+1); } result = elementLineNumberCache.get(element); if (result != null) return result; return -1; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -