Deteniendo JPopupMenu robando el foco
tengo unJTextField
para lo cual espero sugerir resultados que coincidan con la entrada del usuario. Estoy mostrando estas sugerencias en unaJList
contenido dentro de unJPopupMenu
.
sin embargo, al abrir el menú emergente programáticamente víashow(Component invoker, int x, int y)
, el foco se está sacando de laJTextField
.
Curiosamente, si llamosetVisible(true)
en cambio, el foco no es robado; pero luego elJPopupMenu
no está adherido a ningún panel, y al minimizar la aplicación mientras la caja está abierta, permanece pintada en la ventana.
También he intentado restablecer el enfoque a laJTextField
utilizandorequestFocus()
, pero luego tengo que restaurar la posición de intercalación usandoSwingUtilities.invokeLater()
, y elinvocar más tarde El lado de las cosas es darle al usuario un ligero margen para jugar con los contenidos existentes, sobrescribirlo o hacer otras cosas impredecibles.
El código que tengo es efectivamente:
<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>
¿Alguien puede sugerir la mejor avenida para bajar para mostrar elJPopupMenu
programáticamente manteniendo el enfoque en elJTextField
?