要想有这个功能,应该用JList,而不是JTextArea。

解决方案 »

  1.   

    JTextArea的多行文本域被定义为具有一种字体和颜色的文本。
    估计要作到你要的效果比较困难。但是另外几个多行文本组件比如JEditorPane和JTextPane就不仅能够显示多行文本,还能显示不同的内容。甚至还可以在JTextPane里边放置图片。另外你还可以自己定制文本组建。
    建议:看机械工业出版社的java2 图形设计 卷II:Swing21章 文本基础
    第22章 文本组件
    23章自定义文本组件
      

  2.   

    同意楼上的,要实现这个效果建议用 JEditPane 会好点。
      

  3.   

    不好意思,自己没有做过。
    不过这两天刚好完成了一个文本编辑框,实现了编辑框内不同的内容有不同的颜色(包括前景色和后景色,甚至可以下划线和加粗等等),由此想到的一种解决方案:
    1。采用JTextPane(不是JEditorPane)实例,并得到他的document作为一个new DefaultStyledDocument实例。
    2。对JTextPane的实例添加光标移动处理事件
    3。获取当前光标所在的行,得到本行的文本的在整个文档中起始位置,和结束位置。
    4。new 一个simpleAttribute的实例attr,并通过Styleconstants.setBackground(attr,color.yellow)方法设置该属性集。(当然Styleconstants还有很多方法来设置属性的)。
    利用StyledDocument的setCharacterAttributes(int,int,attr,false)设置该行的属性。那么这一行就有一个背景色了。其实关键的办法就是利用StyledDocument(文档实例)提供的setCharacterAttributes方法,把一个属性集应用到这个文档的一定范围上。而JTextPane的默认document就是DefaultStyledDocumen,所以只要getDocument()就可以获得。
    另外属性集利用Styleconstants可以完成需要的设置。
    最后至于该属性应用在文档的什么范围,就靠光标的改变事件来获取。
    花脚大蚊子
      

  4.   

    看看下面的代码:能实现部分你说的功能,主要未完成问题是光标定位时(刚好选中一行还没有实现)
    我现在是光标移动到位置到文档结束,全部设置为新属性。当然这里还要仔细改动。但是我认为,基本结构就应该是这样子的。在jTextPane1_caretUpdate负责设置本次要设置的文档范围,就是从哪儿开始,哪儿结束,同时,另外一个重要的问题,就是把上次的那个清除掉。这些我都没有写。
    希望对你能有所帮助。JScrollPane jScrollPane1 = new JScrollPane();
    JTextPane jTextPane1 = new JTextPane();
    StyledDocument document = (StyledDocument)jTextPane1.getDocument();
    SimpleAttributeSet attributes = new SimpleAttributeSet();jScrollPane1.getViewport().add(jTextPane1,null);
    StyleConstants.setForeground(attributes,Color.yellow);
    jTextPane1.setText(";askdjf;askdfjaskdfffffffffffffffffffff");//jTextPane1.addCaretListener(new javax.swing.event.CaretListener() {
                public void caretUpdate(CaretEvent e) {
                    jTextPane1_caretUpdate(e);
                }
            });void jTextPane1_caretUpdate(CaretEvent e) {
            int i = e.getDot() ;
            StyleConstants.setBackground(attributes,Color.yellow);
            document.setCharacterAttributes(i,document.getLength()-i,attributes,false);
    }我在jbuilder5 下执行的。