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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage