java - 你如何在Swing的Textfield上設置焦點?




focus (4)

我在Java中使用Swing創建了一個表單。在表單中我使用了一個文本字段,每當我按下鍵時我都必須設置焦點。如何在Java中設置焦點到特定組件?



這會工作..

SwingUtilities.invokeLater( new Runnable() { 

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

現在我們已經搜索了API,我們需要做的就是閱讀API。

根據API文檔:

“因為此方法的焦點行為取決於平台,所以強烈建議開發人員盡可能使用requestFocusInWindow。”


請注意,以上所有內容都因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) {
    }
}




focus