我正在开发一个自动完成功能(包含在插入符号位置下的一个小窗口,提示您将要写的内容)扩展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,我无法理解原因。
调用此方法或实现此功能的合法方式是什么?
答案 0 :(得分:2)
1)我希望(小窗口)== JWindow
不要忘记声明JWindow(Window owner)
2)那么你可以选择两个选择
JTable
有一个列,实现RowFilter非常简单,没有必要解决您描述的任何内容,只实现了从简单JTextField
3)KeyListener
不正确的倾听者看Document/DocumentListener
4)最简单,最舒适的方式是实施JTable
和hightlighting