Когда это законный вызов getMagicCaretPosition()
Я разрабатываю функцию автозаполнения (которая состоит из небольшого окна под позицией каретки, предлагающего написать то, что вы пишете), расширяя 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()
возвращает ноль, и я не могу понять, почему.
Каков законный способ вызвать этот метод или реализовать эту функцию?
1 ответ
1) Я надеюсь, что (маленькое окно) == JWindow
не забудьте объявить JWindow(владелец окна)
2) тогда вы можете использовать два варианта
JTable
с одним столбцом, так просто реализует RowFilter, не требуется решать все, что вы описываете, реализована фильтрация только из простогоJTextField
3) KeyListener
не правильно слушатель смотрит на Document/DocumentListener
4) Самый простой и удобный способ - это реализовать JTable
и с подсветкой