我正在使用Java制作一个小应用程序,其中使用了JTextField。现在,我希望在运行应用程序时,光标自动放入其中,以便用户无需单击它然后编写文本。我已经尝试了网上找到的几乎所有方法:setCaretPosition(0),grabFocus(),requestFocusInWindow()或requestFocus(),但都没有起作用!我很绝望,请您帮助我解决这个问题好吗?非常感谢。
我正在使用Java制作一个小应用程序,其中使用了JTextField。现在,我希望在运行应用程序时,光标自动放入其中,以便用户无需单击它然后编写文本。我已经尝试了网上找到的几乎所有方法:setCaretPosition(0),grabFocus(),requestFocusInWindow()或requestFocus(),但都没有起作用!我很绝望,请您帮助我解决这个问题好吗?非常感谢。
默认情况下,焦点将转移到窗口上的第一个组件。
如果文本字段不是第一个组件,则可以使用:
textField.requestFocusInWindow();
然而,您必须在窗口可见后调用此方法。
如果窗口不可见,则您应该能够使用Java lambda:
EventQueue.invokeLater( () -> textField.requestFocusInWindow() );
上述代码将被放置在Event Dispatch Thread (EDT)
的末尾,因此应在窗口可见后执行。
或者,您可以使用RequestFocusListener
方法。
请注意,现在已经存在Java lambda,这在大多数情况下都是过度设计,但它仍然适用于设置模态对话框的焦点。
这段代码可以正确地定位光标位置:textField.requestFocus();
SwingUtilities.invokeLater
并进行requestFocusInWindow
调用... - MadProgrammer