Zatrzymywanie JPopupMenu kradzież ostrości

mamJTextField dla których mam nadzieję zasugerować wyniki pasujące do danych użytkownika. Wyświetlam te sugestie w aJList zawarte wJPopupMenu.

jednak, przy programowym otwieraniu menu podręcznego przezshow(Component invoker, int x, int y), uwaga jest skupiona naJTextField.

Dziwne, jeśli zadzwonięsetVisible(true) zamiast tego fokus nie jest skradziony; ale potemJPopupMenu nie jest dołączony do żadnego panelu, a podczas minimalizowania aplikacji, gdy pudełko jest otwarte, pozostaje pomalowane na oknie.

Próbowałem także zresetować fokus naJTextField za pomocąrequestFocus(), ale potem muszę przywrócić pozycję karetki za pomocąSwingUtilities.invokeLater()iwywołać później strona rzeczy daje użytkownikowi niewielki margines, aby poradzić sobie z istniejącą zawartością / nadpisać go / lub zrobić inne nieprzewidywalne rzeczy.

Kod, który mam, jest efektywny:

<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>

Czy ktoś może zaproponować najlepszą aleję, aby zejść na dół, aby pokazaćJPopupMenu programowo, zachowując nacisk naJTextField?

questionAnswers(3)

yourAnswerToTheQuestion