Подтвердить что ты не робот

Как вы фокусируетесь на текстовом поле в Swing?

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

4b9b3361

Ответ 2

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

SwingUtilities.invokeLater( new Runnable() { 

public void run() { 
        Component.requestFocus(); 
    } 
} );

Ответ 3

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

В соответствии с документацией API:

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

Ответ 4

Обратите внимание, что все вышеперечисленное не работает по какой-либо причине в 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) {
    }
}

Ответ 5

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