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
?