Java 如何从GWT中的RichTextArea获取光标位置?

Java 如何从GWT中的RichTextArea获取光标位置?,java,gwt,cursor,textarea,richtextbox,Java,Gwt,Cursor,Textarea,Richtextbox,我想从RichTextArea获取光标位置或位置。 我不知道如何在没有任何鼠标事件的情况下获取当前光标位置。 e、 g.TextArea有方法getCursorPos(),但RichTextArea没有类似TextArea的方法。 有人知道吗?请帮帮我 提前感谢…如果要在RichTextArea的光标位置插入内容,可以使用格式化程序: RichTextArea.Formatter formatter = richText.getFormatter(); formatter.insertHTML(

我想从RichTextArea获取光标位置或位置。 我不知道如何在没有任何鼠标事件的情况下获取当前光标位置。 e、 g.TextArea有方法getCursorPos(),但RichTextArea没有类似TextArea的方法。 有人知道吗?请帮帮我


提前感谢…

如果要在RichTextArea的光标位置插入内容,可以使用格式化程序:

RichTextArea.Formatter formatter = richText.getFormatter();
formatter.insertHTML("My text is inserted at the cursor position");
要使用JavaScript查找光标位置,请尝试Tim Down提出的解决方案:


我不知道这是否仍然是必需的,但我今天一直在尝试做同样的事情,并没有找到确切的答案。我确实找到了这个非GWT解决方案(),它需要稍微调整一下。希望这对别人有帮助

    public static native int getCursor(Element elem) /*-{
    var node = elem.contentWindow.document.body
    var range = elem.contentWindow.getSelection().getRangeAt(0);

    var treeWalker = $doc.createTreeWalker(node, NodeFilter.SHOW_TEXT, function(node) {
        var nodeRange = $doc.createRange();
        nodeRange.selectNodeContents(node);
        return nodeRange.compareBoundaryPoints(Range.END_TO_END, range) < 1 ? NodeFilter.FILTER_ACCEPT
                : NodeFilter.FILTER_REJECT;
    }, false);

    var charCount = 0;
    while (treeWalker.nextNode()) {
        charCount += treeWalker.currentNode.length;
    }

    if (range.startContainer.nodeType == 3) {
        charCount += range.startOffset;
    }

    return charCount;
}-*/;
公共静态本机int getCursor(元素elem)/*-{
var节点=elem.contentWindow.document.body
var range=elem.contentWindow.getSelection().getRangeAt(0);
var treeWalker=$doc.createTreeWalker(节点,NodeFilter.SHOW_文本,函数(节点){
var noderage=$doc.createRange();
nodeRange。选择NodeContents(节点);
返回nodeRange.compareBoundaryPoints(Range.END_至_END,Range)<1?NodeFilter.FILTER_接受
:NodeFilter.FILTER\u拒绝;
},假);
var charCount=0;
while(treeWalker.nextNode()){
charCount+=treeWalker.currentNode.length;
}
if(range.startContainer.nodeType==3){
charCount+=range.startOffset;
}
返回字符数;
}-*/;

在Vaadin 7.5@AndreiVolgin中,答案似乎不起作用。但是,如果有人只想在光标位置粘贴一些文本,那么Vaadin的CKEditor wrapper插件可能会有帮助()

以下是子孙后代的一个例子:

CKEditorTextField textArea;
// and for example in some listener function we could call:
textArea.insertHtml("<b>some html</b>");
textArea.insertText("sample text");
CKEditorTextField textArea;
//例如,在某些侦听器函数中,我们可以调用:
insertHtml(“一些html”);
textArea.insertText(“示例文本”);

试试这个,对我有用。基本上,在富文本区域中插入一个唯一的文本,然后获取插入文本的索引,然后将其删除

    richText=new RichTextArea();
    basicFormatter=richText.getFormatter();
    basicFormatter.insertHTML("dummydata");
    int cursor=richText.getText().indexOf("dummydata");
    basicFormatter.undo();

这不行!尝试将该值设置为“0123456789”,然后将光标移动到末尾。您将看到值6而不是10。@Andrei,调用getSelection()时是否应将RichTextArea作为元素发送。。我在调用getSelection()时发送了我的RichTextArea,我得到了异常Null。这返回每行从0开始的索引,如果我在第三行和第四个单词,它将显示第四个索引,并且忽略上述三行,这是不正确的。我删除了不符合所有用例的代码,并建议了不同的解决方案。