Прекращение захвата фокуса JPopupMenu

У меня есть JTextField, для которого я надеюсь предложить результаты, соответствующие вводу пользователя. Я показываю эти предложения в JList, содержащемся в JPopupMenu.

Однакопри программном открытии всплывающего меню с помощьюshow(Component invoker, int x, int y)фокус переносится из JTextField.

Как ни странно, если вместо этого я вызову setVisible(true), фокус не украден; но тогда JPopupMenuне привязан ни к одной панели, и при сворачивании приложения, когда окно открыто, оно остается нарисованным в окне.

Я также пытался сбросить фокус на JTextFieldс помощью requestFocus(), но затем мне пришлось восстановить положение каретки с помощью SwingUtilities.invokeLater() , и сторона вызова позжедает пользователю небольшой запас, чтобы возиться с существующим содержимым / перезаписывать его / или делать другие непредсказуемые вещи.

Код, который у меня есть, эффективен:

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());
    }
});

Может ли кто-нибудь предложить лучший путь для отображения JPopupMenuпрограммно, сохраняя при этом фокус на JTextField?

11
задан kaiz.net 5 April 2012 в 20:11
поделиться