快速业务通道

JTextArea中显示LineNumber - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25

JTextArea中显示LineNumber

时间:2007-05-30
//package tryLineNumber;

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Point; 


import javax.swing.JFrame; 
import javax.swing.JTextArea;
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
//import javax.swing.JTextPane; 
import javax.swing.text.BadLocationException;
import javax.swing.text.Document; 


/** 
  * A class illustrating running line number count on JTextPane. Nothing 
is painted on the pane itself, 
  * but a separate JPanel handles painting the line numbers. 
  * 
  * @author Daniel Sj?blom 
  * Created on Mar 3, 2004 
  * Copyright (c) 2004 
  * @version 1.0 
  */ 
public class LineNr extends JPanel 
{ 
        // for this simple experiment, we keep the pane + scrollpane as members. 
        //JTextPane pane; 
        JTextArea 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 the linenumbers stay in sync 
                pane = new JTextArea()
                { 
                        public void paint(Graphics g) 
                        { 
                                super.paint(g); 
                                LineNr.this.repaint(); 
                        } 
                }; 
                scrollPane = new JScrollPane(pane); 


        } 
        public void paint(Graphics g) 
        { 
                super.paint(g); 


                // We need to properly convert the points to match the viewport 
                // Read docs for viewport 
                int start =pane.viewToModel(scrollPane.getViewport().getViewPosition()); // starting pos in document 
                int end = 
                        pane.viewToModel( 
                                new Point( 
                                        scrollPane.getViewport().getViewPosition().x + pane.getWidth(), 
                                        scrollPane.getViewport().getViewPosition().y + pane.getHeight())); 
                // end pos in doc 


                // translate offsets to lines 
                Document doc = pane.getDocument(); 
                int startline = doc.getDefaultRootElement().getElementIndex(start) + 1; 
                int endline = doc.getDefaultRootElement().getElementIndex(end) + 1; 


                int fontHeight = g.getFontMetrics(pane.getFont()).getHeight(); 
                int fontDesc = g.getFontMetrics(pane.getFont()).getDescent(); 
                int starting_y = -1; 


                try 
                { 
                        starting_y = pane.modelToView(start).y - 
scrollPane.getViewport().getViewPosition().y + fontHeight - fontDesc; 
                } 
                catch 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号