我在Java中使用Swing创建了一个表单。在表单中我使用了一个文本字段,每当我按下键时我都必须设置焦点。如何在Java中设置焦点到特定组件?
答案 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();
它是相同的