编辑框加上行号
来源:互联网 发布:google拼音 linux 编辑:程序博客网 时间:2024/06/05 19:36
运行效果如下所示:
示例代码如下:
public class LineNumberHeaderView extends javax.swing.JComponent { private final Font DEFAULT_FONT = new Font(Font.MONOSPACED, Font.PLAIN, 13); public final Color DEFAULT_BACKGROUD = new Color(228, 228, 228); public final Color DEFAULT_FOREGROUD = Color.red; public final int nHEIGHT = Integer.MAX_VALUE - 1000000; public final int MARGIN = 5; private int lineHeight; private int fontLineHeight; private int currentRowWidth; private FontMetrics fontMetrics; public LineNumberHeaderView() { setFont(DEFAULT_FONT); setForeground(DEFAULT_FOREGROUD); setBackground(DEFAULT_BACKGROUD); setPreferredSize(9999); } public void setPreferredSize(int row) { int width = fontMetrics.stringWidth(String.valueOf(row)); if (currentRowWidth < width) { currentRowWidth = width; setPreferredSize(new Dimension(2 * MARGIN + width + 1, nHEIGHT)); } } @Override public void setFont(Font font) { super.setFont(font); fontMetrics = getFontMetrics(getFont()); fontLineHeight = fontMetrics.getHeight(); } public int getLineHeight() { if (lineHeight == 0) { return fontLineHeight; } return lineHeight; } public void setLineHeight(int lineHeight) { if (lineHeight > 0) { this.lineHeight = lineHeight; } } public int getStartOffset() { return 4; } @Override protected void paintComponent(Graphics g) { int nlineHeight = getLineHeight(); int startOffset = getStartOffset(); Rectangle drawHere = g.getClipBounds(); g.setColor(getBackground()); g.fillRect(drawHere.x, drawHere.y, drawHere.width, drawHere.height); g.setColor(getForeground()); int startLineNum = (drawHere.y / nlineHeight) + 1; int endLineNum = startLineNum + (drawHere.height / nlineHeight); int start = (drawHere.y / nlineHeight) * nlineHeight + nlineHeight - startOffset; for (int i = startLineNum; i <= endLineNum; ++i) { String lineNum = String.valueOf(i); int width = fontMetrics.stringWidth(lineNum); g.drawString(lineNum + " ", MARGIN + currentRowWidth - width - 1, start); start += nlineHeight; } setPreferredSize(endLineNum); } public static void main(String[] args){// try {//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//} catch (Exception e) {//e.printStackTrace();//} JFrame frame = new JFrame("带行号的TextArea Demo"); JLabel label = new JLabel(" 编辑区域"); LineNumberHeaderView view = new LineNumberHeaderView(); JScrollPane scrollPane = new JScrollPane(new JTextArea()); scrollPane.setRowHeaderView(view); frame.getContentPane().add(label, "North"); frame.getContentPane().add(scrollPane,"Center"); frame.setPreferredSize(new Dimension(300, 200)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(200, 200, 300, 200); frame.setVisible(true); }}
- 编辑框加上行号
- Swing 记忆之给编辑框加上行号
- VC++6.0编辑框显示行号
- 输出时,自动加上行号
- vim编辑显示行号
- 如何设置PLSQL在编辑框显示行号
- 为Flex 2 DataGrid加上行号
- word内的内容加上行号
- 在文件中每行开头加上行号
- 给DataGridView加上行号吧[C#、WinForm]
- 在word文档中自动加上行号
- 给你的C代码加上行号
- 将每行输入,加上行号输出
- Dreamweaver代码编辑显示行号
- 给定一个Java文件,在文件每行前面加上行号
- 读入源文件,并在每行前加上行号和[Tab]
- 脚本:查看Squid配置,去掉注释,加上行号
- getchar接收用putchar输出的时候加上行号
- 【OpenCV】SIFT原理与源码分析:关键点搜索与定位
- java操作XML
- 划分树模板
- 高校俱乐部参会成员餐票领取安排及第二届研讨会邀请信
- 心得3--Servlet的一些细节
- 编辑框加上行号
- 2011 Asia Beijing Regional B:Hou Yi's secret
- ubuntu 10.04 install jdk 7 from sun java jdk
- java Web Servlet
- stretchableImageWithLeftCapWidth:topCapHeight:函数用法 总结
- Windows下如何使用QT编写dll程序
- 解决Chrom 浏览器对 returnValue 有时候接受不到的问题
- 快速排序的非递归实现
- 目的节点序列距离矢量(DSDV)协议