Stoppen von JPopupMenu, um den Fokus zu stehlen
Ich habe einJTextField
Ich hoffe, dass ich Ergebnisse vorschlagen kann, die mit den Eingaben des Benutzers übereinstimmen. Ich zeige diese Vorschläge in einerJList
enthalten in aJPopupMenu
.
jedoch, beim programmgesteuerten Öffnen des Popup-Menüs übershow(Component invoker, int x, int y)
Der Fokus wird immer von derJTextField
.
Seltsamerweise, wenn ich anrufesetVisible(true)
Stattdessen wird der Fokus nicht gestohlen. aber dann dieJPopupMenu
ist an keinem Panel angebracht und wenn die Anwendung minimiert wird, während die Box geöffnet ist, bleibt sie auf dem Fenster gemalt.
Ich habe auch versucht, den Fokus auf den zurückzusetzenJTextField
mitrequestFocus()
, aber dann muss ich die Einfügemarke mit wiederherstellenSwingUtilities.invokeLater()
, und dasspäter aufrufen Die andere Seite gibt dem Benutzer einen kleinen Spielraum, um mit den vorhandenen Inhalten herumzuspielen / sie zu überschreiben / oder andere unvorhersehbare Dinge zu tun.
Der Code, den ich habe, ist effektiv:
<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>
Kann mir jemand die beste Straße vorschlagen, um das zu zeigen?JPopupMenu
programmatisch unter Beibehaltung des Fokus auf dieJTextField
?