怎么在Java中像UltraEdit那样来显示行号??这方面的源代码一次也没见过,这个功能怎么实现???

解决方案 »

  1.   

    在JScrollPane的RowHeader里面在做一个Table(称之为HeaderTable)
    HeaderTable监听MainTable的ListSelection事件, 保持选中一致.
    监听MainTable的TableModelChange事件, 保持行数一致.
    重写HeaderTable的模型, getValueAt(row, column)返回row + 1
      

  2.   

    package rowHeader;public class LineNumberTest extends javax.swing.JFrame
    {
        
        /** Creates new form LineNumberTest */
        public LineNumberTest()
        {
            initComponents();
         }
     
        
     
       // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
     
        private void initComponents() 
        {
        jScrollPane1 = new javax.swing.JScrollPane();
            jPanel1 = new javax.swing.JPanel();
            jTxtArea1 = new javax.swing.JTextArea();
            jTLineNums = new javax.swing.JTextArea();
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
           jPanel1.setLayout(new java.awt.BorderLayout());
     
            jTxtArea1.addCaretListener(new javax.swing.event.CaretListener() {
     
                public void caretUpdate(javax.swing.event.CaretEvent evt)  
    {
                    jTxtArea1CaretUpdate(evt);
                }
     
            });
     
     
            jPanel1.add(jTxtArea1, java.awt.BorderLayout.CENTER);
            jTLineNums.setBackground(javax.swing.UIManager.getDefaults().getColor("TextField.disabledBackground"));
            jTLineNums.setEditable(false);
            jPanel1.add(jTLineNums, java.awt.BorderLayout.WEST);
            jScrollPane1.setViewportView(jPanel1);
     
            getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
     
            java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
     
            setBounds((screenSize.width-400)/2, (screenSize.height-300)/2, 400, 300);
     
        }
        // </editor-fold>
     
        private void jTxtArea1CaretUpdate(javax.swing.event.CaretEvent evt) 
    {
     
            //Caret
            ci = jTxtArea1.getCaretPosition();
     
            String sc;
            sc = Integer.toString(ci);
     
            String s = "0";
            sli=jTxtArea1.getLineCount();
            s = Integer.toString(sli);
     
            if(LnNums) {
                setLineNums();
               //LnNums =false;
            }
        }
     
         private void setLineNums() 
    {
     
            jTLineNums.setText("");
            //jTLNums.setFont (new Font (fName, Font.PLAIN, fSize));
     
            for (int i = 1; i <= sli; i++) {
                jTLineNums.append(i+" \r\n");
            }
            //setFoc ();
        }
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
     
                public void run() {
                    new LineNumberTest().setVisible(true);
                }
            });
        }
     
        public javax.swing.JPanel jPanel1;
        public javax.swing.JScrollPane jScrollPane1;
        public javax.swing.JTextArea jTLineNums;
        public javax.swing.JTextArea jTxtArea1;
        boolean LnNums = true;
        int iLnNums, iSymBar, iCodeBar, iInv, sli, ci;
    }
      

  3.   

    啊, 看错了. 以为是table的行号呢, 呵呵JBuilder里面有相关源码的, 不过需要反编译, 哈哈哈. 好久不用JBuilder, 找不到鸟http://blog.csdn.net/bovy/archive/2007/04/29/1591542.aspx看看这个