有没有一种方法可以在GWT RichTextArea中设置cusror位置。在TextArea中有方法setCusrorPosition()来执行此操作,但在RichTextArea中没有。
也许有 native JavaScript(从GWT调用)可以在RichTextArea中设置光标位置?

最佳答案

没错,RichTextArea没有提供setSelectionRange方法,但是我已经使用JSNI创建了一个方法。

下面是方法,

public native void setSelectionRange(Element elem, int pos, int length) /*-{
    try {
        var selection = null, range2 = null;
        var iframeWindow = elem.contentWindow;
        var iframeDocument = iframeWindow.document;

        selection = iframeWindow.getSelection();
        range2 = selection.getRangeAt(0);

        //create new range
        var range = iframeDocument.createRange();
        range.setStart(selection.anchorNode, pos);
        range.setEnd(selection.anchorNode, length);

        //remove the old range and add the newly created range
        if (selection.removeRange) { // Firefox, Opera, IE after version 9
            selection.removeRange(range2);
        } else {
            if (selection.removeAllRanges) { // Safari, Google Chrome
                selection.removeAllRanges();
            }
        }
        selection.addRange(range);
    } catch (e) {
        $wnd.alert(e);
    }
}-*/;

对于使用上述方法,请编写以下代码:
final RichTextArea tr = new RichTextArea();
    Button b = new Button("Test");
    b.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            setSelectionRange(tr.getElement(), 15, 20);
            tr.setFocus(true);
        }
    });
    RootPanel.get().add(tr);
    RootPanel.get().add(b);

注意:请记住将要通过的验证条件“pos”和“length”放入setSelectionRange()方法中。
该代码已在IE9,FF,Chrome中进行了测试。

关于java - 如何在GWT RichTextArea中设置光标位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12549739/

10-09 05:27