Остановка JPopupMenu крадет фокус

у меня естьJTextField для которого я надеюсь предложить результаты, совпадающие с пользовательскими данными. Я отображаю эти предложения в видеJList содержится вJPopupMenu.

However, при открытии всплывающего меню программно черезshow(Component invoker, int x, int y)центр внимания берется изJTextField.

Как ни странно, если я позвонюsetVisible(true) вместо этого фокус не украден; но тогдаJPopupMenu не прикреплен к какой-либо панели, и при сворачивании приложения, когда окно открыто, оно остается окрашенным в окне.

Я также пытался сбросить фокусировку наJTextField с помощьюrequestFocus(), но тогда я должен восстановить позицию каретки, используяSwingUtilities.invokeLater()иinvoke later Одной из сторон является предоставление пользователю небольшого запаса, чтобы возиться с существующим содержимым / перезаписать его / или сделать другие непредсказуемые вещи.

Код, который я получил, эффективно:

<code>JTextField field = new JTextField();
JPopupMenu menu = new JPopupMenu();

field.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
        JList list = getAListOfResults();

        menu.add(list);
        menu.show(field, 0, field.getHeight());
    }
});
</code>

Может кто-нибудь предложить лучший проспект, чтобы спуститься, чтобы показатьJPopupMenu программно, сохраняя при этомJTextField?

Ответы на вопрос(3)

Ваш ответ на вопрос