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:
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());
}
});
Alguém pode sugerir a melhor avenida para descer para mostrar oJPopupMenu
programaticamente, preservando o foco noJTextField
?