Остановка 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
?