Когда это законный вызов 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

  • JList с автозаполнением JComboBox / JTextField

3) KeyListener не правильно слушатель смотрит на Document/DocumentListener

4) Самый простой и удобный способ - это реализовать JTableи с подсветкой

Другие вопросы по тегам