web-dev-qa-db-ja.com

SwingのTextfieldにどのように焦点を当てていますか?

JavaのSwingを使用して1つのフォームを作成しました。キーを押すたびにフォーカスを設定する必要があるテキストフィールドを1つ使用しました。Javaで特定のコンポーネントにフォーカスを設定する方法=?

42
om.

Component.requestFocus() は必要なものを提供しますか?

83
phunehehe

これはうまくいくでしょう..

SwingUtilities.invokeLater( new Runnable() { 

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

APIを検索したので、APIを読むだけです。

APIドキュメントによると:

「このメソッドのフォーカス動作はプラットフォームに依存しているため、開発者は可能な限りrequestFocusInWindowを使用することを強くお勧めします。」

14
camickr

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) {
    }
}
4
Marc

JComponent.grabFocus();も使用できます。同じです

3
Jeff_Alieffson