Parando o JPopupMenu roubando o foco
eu tenho umJTextField
para o qual eu estou esperando para sugerir resultados para coincidir com a entrada do usuário. Estou exibindo essas sugestões em umJList
contido dentro de umJPopupMenu
.
Contudo, ao abrir o menu popup programaticamente viashow(Component invoker, int x, int y)
, o foco está sendo tirado doJTextField
.
Estranhamente, se eu ligarsetVisible(true)
em vez disso, o foco não é roubado; mas depois oJPopupMenu
não está anexado a nenhum painel e, ao minimizar a aplicação enquanto a caixa está aberta, ela permanece pintada na janela.
Eu também tentei redefinir o foco para oJTextField
usandorequestFocus()
, mas depois tenho que restaurar a posição do cursor usandoSwingUtilities.invokeLater()
, e asinvocar depois O lado das coisas é dar ao usuário uma pequena margem para mexer com o conteúdo existente / sobrescrevê-lo / ou fazer outras coisas imprevisíveis.
O código que tenho é efetivamente:
<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>
Alguém pode sugerir a melhor avenida para descer para mostrar oJPopupMenu
programaticamente, preservando o foco noJTextField
?