北京融合教育:Java如何实现显示行标

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/27 13:05:44
许多编辑器中都有在左侧显示行号的功能,这个在Java中怎样实现?
如 中间是一个TextArea. 左侧则显示文字的行号.
请给出实例代码。谢谢

 
 
 
Good question!

显示行号的组件必须和文本域分开但又必须和文本域一起上下滚动。
做这种事有比把两个 JTextArea 包在一个 JScrollPane 里更容易的方法吗?

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;

class C extends JFrame {
    public C( ) {
        final JTextArea textArea = new JTextArea( 20, 50 ),
                        lineNumberColumn = new JTextArea( " 1 " );

        textArea.getDocument( ).addDocumentListener( new DocumentListener( ) {
            public void insertUpdate( DocumentEvent e ) {
                lineNumberColumn.setText( "" );
                for ( int i = 1; i <= textArea.getLineCount( ); i++ )
                    lineNumberColumn.append( " " + i + " \n" );
            }
            public void  removeUpdate( DocumentEvent e ) { insertUpdate( e ); }
            public void changedUpdate( DocumentEvent e ) {                    }
        } );

        lineNumberColumn.setBackground( Color.ORANGE );
        lineNumberColumn.setFocusable( false );

        JScrollPane sp = new JScrollPane( textArea );
        sp.setRowHeaderView( lineNumberColumn );

        getContentPane( ).add( sp );
        pack( );
        setLocation( 200, 200 );
        setDefaultCloseOperation( EXIT_ON_CLOSE );
        setVisible( true );
    }

    public static void main( String[ ] args ) { new C( ); }
}