我正在开发一个自动完成功能(包含在插入符号位置下的一个小窗口,建议您将要编写的内容)扩展 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) 我希望 (小窗口) == JWindow
不要忘记声明 JWindow(Window owner)
2)那么你可以有两种选择使用
JTable
具有一列,实现起来非常简单 RowFilter ,不需要解决您所描述的任何问题,只需从简单的JTextField
实现过滤
JList
带有 AutoComplete JComboBox / JTextField
3) KeyListener
不是正确的监听器,查看 Document/DocumentListener
4) 最简单、最舒适的方法是实现一个 JTable
,并使用 hightlighting
关于java - 什么时候调用 getMagic CaretPosition() 是合法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8863721/