何时合法调用getMagicCaretPosition()

时间:2012-01-14 16:54:43

标签: java swing autocomplete jtextpane caret

我正在开发一个自动完成功能(包含在插入符号位置下的一个小窗口,提示您将要写的内容)扩展JTextPane,并在与此组件关联的KeyAdapter中写道:

...
@Override
public void keyReleased(KeyEvent e) {
    if (Character.isLetterOrDigit(e.getKeyChar())) {
        p = getCaret().getMagicCaretPosition();
        if (p != null) {
            SwingUtilities.convertPointToScreen(p, this);
            p.x = p.x + 2;
            p.y = p.y + 20;
            autocompletion.setLocation(p.x, p.y);
        }
    }
}
...

问题是有时getCaret().getMagicCaretPosition()返回null,我无法理解原因。

调用此方法或实现此功能的合法方式是什么?

1 个答案:

答案 0 :(得分:2)

1)我希望(小窗口)== JWindow不要忘记声明JWindow(Window owner)

2)那么你可以选择两个选择

3)KeyListener不正确的倾听者看Document/DocumentListener

4)最简单,最舒适的方式是实施JTablehightlighting