捕捉光标事件:
写个类implements CaretListener
实现public void caretUpdate(CaretEvent e)方法

解决方案 »

  1.   

    比如你的编辑区是一个JTextPane的对象textPane,那么
    textPane.addCaretListener(new caretListener());class caretListener implements CaretListener{
          public void caretUpdate(CaretEvent e){
                 System.out.println(e.getDot());//输出光标位置
                          ……                  //实现你所需的功能代码
          }
    }
      

  2.   

    如过获取光标所在位置属性,在caretUpdate(CaretEvent e)方法中加入:
    AttributeSet attr =textPane.getStyledDocument().getCharacterElement(e.getDot()).getAttributes();
    光标前后位置属性只要改e.getDot()-1或e.getDot()+1
    ……
      

  3.   

    能否用Element e=getCharacterElement(int pos)方法获取字符?
      

  4.   

    想自己做文本框吗?没事做啊,找麻烦
    要想知道光标位置的字符,好像得根据字体计算文本的宽高来得到此字符在字符串中的索引号。字体有Font类可用。但不知JTextPane是否有此功能
      

  5.   

    金山?
    跟java有什么关系?
    你去用c++吧
      

  6.   

    JTextArea.getText().subString(position - 2, position);
      

  7.   

    TO;okwuzhijun(SKYSEA) 
    "JTextArea.getText().subString(position - 2, position);"这个方法未必能够适用于任何文本环境吧?金山词霸无论是表格\网页\------甚至菜单中也能读取相应的文本并能翻译发音,如用java,如何实现这样的功能呢?
      

  8.   

    回复人: Guyf(不明白) 
    java不是万能的....我认为这个说法是不负责任的.java,虽不是万能的,但这样的功能却是必定能够实现的.只是我们的水平太臭,未入门径耳!高手呢?
      

  9.   

    "怎么没看见人得分啊!!"大概要结分才能有分吧?如用java连这样的问题也解决不了,太没面子了吧?等高手出现!頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂██████████頂頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂████████████████頂頂頂頂 
    頂頂頂頂頂頂頂頂頂頂████頂頂██████████頂頂頂頂頂頂頂頂頂 
    頂頂頂頂頂頂████████頂頂██頂頂頂████頂頂頂頂頂頂頂頂頂頂 
    頂█████████████頂頂頂頂頂頂頂███頂頂頂頂頂頂頂頂頂頂頂 
    頂███████████頂頂頂頂頂頂頂頂█████████頂頂頂頂頂頂 
    頂頂█████████頂頂頂頂頂頂頂頂████████████頂頂頂頂 
    頂頂頂█頂頂頂████頂頂頂頂頂頂████頂頂頂頂頂█████頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂頂██頂頂頂█頂頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂███頂頂頂██頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂███頂頂頂██頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂███頂頂███頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂███頂頂███頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂███頂頂███頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂███頂頂███頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂██頂頂頂██頂頂頂頂███頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂██頂頂頂██頂頂頂頂███頂頂頂頂頂 
    頂頂頂████████頂頂頂頂頂頂█頂頂██頂頂頂頂████頂頂頂頂頂 
    頂頂頂頂███████頂頂頂頂頂頂頂頂頂██頂頂█頂頂頂██頂頂頂頂頂 
    頂頂頂頂頂頂█████頂頂頂頂頂頂頂頂███頂頂████頂頂頂頂頂頂頂 
    頂頂頂頂頂頂頂頂███頂頂頂頂頂頂頂████頂頂頂██████頂頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂█████頂頂頂頂頂██████頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂████頂頂頂頂頂頂頂頂█████頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂頂█████頂頂頂頂頂頂頂頂頂頂████頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂██頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂██頂頂頂頂 
    頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂
      

  10.   

    用C++一般是用hook,就是钩子,钩出来光标所在地方的(系统内存中的)文本。
    好像Windows C++有这方面的函数。
    但是Java就不行了。
    第一,它能只访问在一个Java虚拟机内部的东西。
    第二,它是跨平台的。没有和平台相关的函数。也就不能用Windows系统内专用的函数。不过既然C++可以做,用Jni转移到Java上就可以罗。
      

  11.   

    StringTokenizer st = new StringTokenizer(source,"|");
    即利用该类: java.util.StringTokenizer;
    source是指的字符串,上面那个语句表示那source中从第一个字符开始找,以“|”为标志,
    然后用st.nextToken()获取“|”后的字符!
      

  12.   

    StringTokenizer恐怕不妥的,因为"|"不是字符,而插入符(即光标)所在位置.
      

  13.   

    金山人家可是用的操作系统底层的API才实现的啊,什么钩子之类的技术
    Java怎么可能呢,只能调JNI了。
    你说的根本就是两码事,能跟金山比?
      

  14.   

    要是能得到插入符的位置,要取它前面的2个字符用subString不行?
    在文本中,"s"和"操"都算是一位
    str = "windows操作系统";
    str.subStirng(6,8)结果是 "s操" 
    不知道你要的是不是这样的结果,错了当我没说,嘎嘎!