Ho uno JTextField
per il quale spero di suggerire risultati che corrispondano all'input dell'utente. Sto visualizzando questi suggerimenti in un JList
contenuto in un JPopupMenu
.Arresto del JPopupMenu che ruba lo stato attivo
Tuttavia, quando si apre il menu a comparsa di programmazione tramite show(Component invoker, int x, int y)
, l'attenzione è sempre preso dal JTextField
.
Stranamente, se invece chiamo setVisible(true)
, lo stato attivo non viene rubato; ma il JPopupMenu
non è collegato a nessun pannello e, quando si riduce a icona l'applicazione mentre la scatola è aperta, rimane dipinta sulla finestra.
Ho anche cercato di ripristinare lo stato attivo al JTextField
utilizzando requestFocus()
, ma poi ho dovuto ripristinare la posizione del punto di inserimento utilizzando SwingUtilities.invokeLater()
, e il invoke tardi lato delle cose è dare all'utente un leggero margine di pasticciare con i contenuti esistenti/sovrascrivi/o fai altre cose imprevedibili.
Il codice che ho è efficace:
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());
}
});
Qualcuno può suggerire la strada migliore per andare verso il basso per mostrare la programmazione JPopupMenu
preservando l'attenzione sul JTextField
?
Ottima risposta ... funziona perfettamente .. grazie;) – Isaac
Questo mi ha aiutato molto, grazie! – Epaga
Dopo molte ricerche su google, questa risposta mi ha aiutato molto –