Tengo un JTextField
para el que estoy esperando sugerir que los resultados coincidan con las entradas del usuario. Estoy mostrando estas sugerencias en un JList
contenido dentro de un JPopupMenu
.Detener JPopupMenu robando el foco
Sin embargo, al abrir el menú emergente de programación a través de show(Component invoker, int x, int y)
, el foco está siendo tomado de la JTextField
.
Por extraño que parezca, si llamo a setVisible(true)
en su lugar, el enfoque no es robado; pero entonces el JPopupMenu
no está conectado a ningún panel, y cuando se minimiza la aplicación mientras el cuadro está abierto, permanece pintado en la ventana.
También he intentado restablecer el foco a la JTextField
usando requestFocus()
, pero luego tengo que restaurar la posición de intercalación utilizando SwingUtilities.invokeLater()
, y la invocación de tarde lado de las cosas es dar al usuario un ligero margen para perder el tiempo con los contenidos existentes/sobrescribirlo/o hacer otras cosas impredecibles.
El código lo que tengo es efectiva:
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());
}
});
¿Puede alguien sugerir el mejor camino para ir hacia abajo para mostrar la programación JPopupMenu
preservando al mismo tiempo el foco en el JTextField
?
La gran respuesta ... funciona perfectamente ... gracias;) – Isaac
Esto me ayudó mucho, ¡gracias! – Epaga
Después de mucho googlear, esta respuesta me ayudó mucho –