再加一个问题,怎么列出JTextArea的行号,就像很多编辑器那样

解决方案 »

  1.   

    改变字体颜色,我收藏别人的代码import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.text.*;public class Test {
      JFrame frame;
      JTextPane textPane;  public Test(){
        frame = new JFrame("JTextPane");
        textPane = new JTextPane();
        setAttr("第一行的文字",Color.red,false,12);
        setAttr("第二行的文字",Color.BLACK,true,25);
        setAttr("第三行的文字",Color.BLUE,false,20);
        frame.getContentPane().add(textPane, BorderLayout.CENTER);
        frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }});
        frame.setSize(200,300);
        frame.setVisible(true);
      }
      /**
       * 插入文字
       * @param str 字符串
       * @param attrSet 字符串详细描述
       */
      public void insert(String str, AttributeSet attrSet) {
        Document doc = textPane.getDocument();
        str = str + "\n";
        try {
          doc.insertString(doc.getLength(), str, attrSet);
        }
        catch (BadLocationException e) {
          System.out.println("BadLocationException: " + e);
        }
      }
      /**
       * 简单的设置文字使用的样式
       * @param str 字符串
       * @param col 颜色
       * @param bold 是否粗体,true为粗
       * @param fontSize 字体大小
       */
      public void setAttr(String str,Color col,boolean bold,int fontSize) {
        SimpleAttributeSet attrSet = new SimpleAttributeSet();
        StyleConstants.setForeground(attrSet, col);
        StyleConstants.setBold(attrSet, bold);
        StyleConstants.setFontSize(attrSet, fontSize);
        insert(str, attrSet);
      }  public static void main(String[] args) {
        new Test();
      }
    }
      

  2.   

    /*获得鼠标在文本域的位置*/
    int intStartPosition = area.getSelectionStart();
      

  3.   

    用javascript实现
    <HTML> 
    <HEAD> 
    <TITLE></TITLE> 
    <SCRIPT LANGUAGE=javascript> 
    function getSelected() 

    return LISTtext.innerText 
    } function LISTI_onmouseover(item) 

    LISTI0.style.color = LB_FGC 
    LISTI1.style.color = LB_FGC 
    LISTI2.style.color = LB_FGC 
    LISTI3.style.color = LB_FGC 
    LISTI4.style.color = LB_FGC item.style.color = LB_HFC 
    } function LISTI_onmouseout(item) 

    item.style.color = LB_FGC 
    } function LISTI_onclick(item) 

    LISTI0.style.backgroundColor = LB_BGC 
    LISTI1.style.backgroundColor = LB_BGC 
    LISTI2.style.backgroundColor = LB_BGC 
    LISTI3.style.backgroundColor = LB_BGC 
    LISTI4.style.backgroundColor = LB_BGC 
    item.style.backgroundColor = LB_HBC 
    LISTtext.innerText = item.innerText 
    alert("You click " + item.innerText + "!") 
    } function writeListbox() 

    document.write("<SPAN id=LISTtext style=\"DISPLAY: none\"></SPAN>") document.write(" <DIV id=LIST") 
    document.write(" style =\"BACKGROUND-COLOR: " + LB_BGC + ";") 
    document.write(" BORDER-BOTTOM: " + LB_BC + " " + LB_BW + " solid;") 
    document.write(" BORDER-LEFT: " + LB_BC + " " + LB_BW + " solid;") 
    document.write(" BORDER-RIGHT: " + LB_BC + " " + LB_BW + " solid;") 
    document.write(" BORDER-TOP: " + LB_BC + " " + LB_BW + " solid;") 
    document.write(" POSITION: absolute; HEIGHT: 99px;") 
    document.write(" LEFT: " + LB_Left + "; TOP: " + LB_Top + "; WIDTH: " + LB_Width + "\">") 
      var i 
      for(i=0; i<ListboxData.length; i++) 
      { 
    document.write("<SPAN id=LISTI" + i) 
    document.write(" style=\"BACKGROUND-COLOR: " + LB_BGC + "; CURSOR: hand;") 
    document.write(" COLOR: " + LB_FGC + "; PADDING-LEFT: 10px; WIDTH: " + (LB_Width - 2 * LB_BW) + "\"") 
    document.write(" LANGUAGE=\"javascript\"") 
    document.write(" onmouseover=\"return LISTI_onmouseover(LISTI" + i + ")\"") 
    document.write(" onmouseout=\"return LISTI_onmouseout(LISTI" + i + ")\"") 
    document.write(" onclick=\"return LISTI_onclick(LISTI" + i + ")\">") 
    document.write(" " + ListboxData[i] + "</SPAN><BR>") 

    document.write("</DIV>") 
    } var ListboxData = new Array() var LB_BGC = "papayawhip" 
    var LB_FGC = "green" 
    var LB_HBC = "orange" 
    var LB_HFC = "red" 
    var LB_BC = "red" 
    var LB_BW = 1 
    var LB_Width = 90 
    var LB_Left = 80 
    var LB_Top = 100 ListboxData[0] = "Item0" 
    ListboxData[1] = "Item1" 
    ListboxData[2] = "Item2" 
    ListboxData[3] = "Item3" 
    ListboxData[4] = "Item4" writeListbox() </SCRIPT> 
    </HEAD> <BODY> <P><INPUT type="button" value="Selected" id=button1 name=button1 
    LANGUAGE=javascript 
    onclick="alert('You selected ' + LISTtext.innerText + '!')"></P> 
    <P>演示程序:</P> </BODY> 
    </HTML> 
      

  4.   

    我是在APPLATION里,JS不行.2楼兄弟的我去试试
      

  5.   

    sour是JTextArea对象
    DefaultHighlighter h = (DefaultHighlighter) sour.getHighlighter();
    MyHighlightPainter p = new MyHighlightPainter(Color.yellow);
    int start = sour.getSelectionStart();
    int end = sour.getSelectionEnd();
    try {
        h.addHighlight(start, end, p);
    }
    catch (BadLocationException ex) {
    }为什么用JTextArea呢,用JTextPane更灵活
      

  6.   

    得到鼠标所在行数列数是不是就是要得到鼠标点一下位置,用光标也可以做把
    inputArea.addCaretListener(new CaretListener() {
    public void caretUpdate(CaretEvent e) {
             int offset = e.getDot();
             //计算光标所在行列
    }
    });
      

  7.   

    列出JTextArea的行号不会,但感觉是不是要搞个不能编辑的JTextArea,一个数字填一行填好,组件不要滚动条,根据文本区的滚动,也滚动到相应的位置。
    胡乱想的,不知道行不行:)
      

  8.   

    高亮问题解决了2楼的方法不是很好,而且我也没试出来,不过谢谢你的热心,我一样会给分的。 zj_ok(zj_ok)的方法可以,虽然你的代码不适合我。谢谢你了,这个问题你帮我解决了。:)第二个问题我要取得就是光标的行数和列数,caret.getDot的确可以取到offset,但是还要自己去算行号和列号?第三个问题,现在的思路看来只有用个jLabel来显示行号了,但是要在滚动的时候重算重华jLabel好像还是挺麻烦的。不知道大家还有什么好的建议伐。PS:to zj_ok(zj_ok),不好意思地说,用jTextArea因为我以前学JAVA的时候还没有jTextPane,而且只是显示纯文本,不知道是不是用jTextPane帮助就不大了?
      

  9.   

    说下高亮时碰到的问题主要是DefaultHighlighter.DefaultHighlightPainter的构建,按javadoc里DefaultHighlighter.DefaultHighlightPainter(Color c) 
              Constructs a new highlight painter.可实际上这个方法并不存在:(
      

  10.   

    class MyHighlightPainter
            extends DefaultHighlighter.DefaultHighlightPainter {
            public MyHighlightPainter(Color color) {
                super(color);
            }
        }
    我的就是这么定义的,不会出错阿,运行正常。我用jdk是1.4.2第二个问题通过offset取行列号也很好算的阿
    line = sour.getLineOfOffset(offset);得到行
    linestart = sour.getLineStartOffset(line);得到行的起始偏移
    col = offset - linestart;得到列,可能+1调整,没具体运行
      

  11.   

    第三个问题我感觉还是用一样的JtextArea比较好
    例如编辑是textarea,行号的是linetext
    这样你通过textarea.getVisibleRect()获取到的rect
    只需要调整一下rect的宽度,比如就设为1
    然后linetext.scrollRectToVisible(rect);就行了