你如何在Swing中设置Textfield的焦点?

时间:2009-09-15 06:03:37

标签: java swing focus

我在Java中使用Swing创建了一个表单。在表单中我使用了一个文本字段,每当我按下键时我都必须设置焦点。如何在Java中设置焦点到特定组件?

5 个答案:

答案 0 :(得分:83)

Component.requestFocus()能为您提供所需吗?

答案 1 :(得分:23)

这可行..

SwingUtilities.invokeLater( new Runnable() { 

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

答案 2 :(得分:14)

现在我们已经搜索了API,我们需要做的就是阅读API。

根据API文档:

  

“因为这个焦点行为   方法依赖于平台,   强烈鼓励开发人员   使用requestFocusInWindow时   可能。 “

答案 3 :(得分: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) {
    }
}

答案 4 :(得分:3)

您也可以使用JComponent.grabFocus();它是相同的