Когда это законный вызов getMagicCaretPosition () - PullRequest
1 голос
/ 14 января 2012

Я разрабатываю функциональность автозаполнения (которая состоит из небольшого окна под позицией каретки, предлагающего то, что вы будете писать), расширяющего 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 Ответ

2 голосов
/ 14 января 2012

1) Я надеюсь, что (маленькое окно) == JWindow не забудьте объявить JWindow (Владелец окна)

2) тогда вы можете использовать два варианта

  • JTable с одним столбцом, здесь так просто реализовать RowFilter , не требуется решать все, что вы описываете, реализована фильтрация только из простого JTextField

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

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

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

...