Как установить фокус на Textfield в Swing? - PullRequest
42 голосов
/ 15 сентября 2009

Я создал одну форму, используя Swing в Java. В форме я использовал одно текстовое поле, в котором я должен установить фокус при каждом нажатии клавиши. Как установить фокус на конкретный компонент в Java?

Ответы [ 5 ]

83 голосов
/ 15 сентября 2009

Будет ли Component.requestFocus() дать вам то, что вам нужно?

23 голосов
/ 13 декабря 2011

Это будет работать ..

SwingUtilities.invokeLater( new Runnable() { 

public void run() { 
        Component.requestFocus(); 
    } 
} );
14 голосов
/ 16 сентября 2009

Теперь, когда мы выполнили поиск API, нам нужно только прочитать API.

Согласно документации API:

"Потому что поведение этого фокуса метод зависит от платформы, разработчикам настоятельно рекомендуется используйте requestFocusInWindow, когда возможный. «

4 голосов
/ 15 октября 2014

Обратите внимание, что все вышеперечисленное не выполняется по какой-либо причине в JOptionPane. После долгих проб и ошибок (больше, чем указано выше, 5 минут, во всяком случае) вот что наконец сработало:

        final JTextField usernameField = new JTextField();
// ...
        usernameField.addAncestorListener(new RequestFocusListener());
        JOptionPane.showOptionDialog(this, panel, "Credentials", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null);


public class RequestFocusListener implements AncestorListener {
    @Override
    public void ancestorAdded(final AncestorEvent e) {
        final AncestorListener al = this;
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                final JComponent component = e.getComponent();
                component.requestFocusInWindow();
                component.removeAncestorListener(al);
            }
        });
    }

    @Override
    public void ancestorMoved(final AncestorEvent e) {
    }

    @Override
    public void ancestorRemoved(final AncestorEvent e) {
    }
}
3 голосов
/ 23 мая 2015

Вы также можете использовать JComponent.grabFocus(); это то же самое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...