在 JTextField 上设置光标

4

我正在使用Java制作一个小应用程序,其中使用了JTextField。现在,我希望在运行应用程序时,光标自动放入其中,以便用户无需单击它然后编写文本。我已经尝试了网上找到的几乎所有方法:setCaretPosition(0),grabFocus(),requestFocusInWindow()或requestFocus(),但都没有起作用!我很绝望,请您帮助我解决这个问题好吗?非常感谢。


可能是重复的问题,链接:https://dev59.com/I2w15IYBdhLWcg3wQ5li - BevynQ
2
这有点困难,因为你实际上很少或根本不知道应用程序何时可供用户使用。您可以尝试使用SwingUtilities.invokeLater并进行requestFocusInWindow调用... - MadProgrammer
2个回答

11

默认情况下,焦点将转移到窗口上的第一个组件。

如果文本字段不是第一个组件,则可以使用:

textField.requestFocusInWindow();

然而,您必须在窗口可见后调用此方法。

如果窗口不可见,则您应该能够使用Java lambda:

EventQueue.invokeLater( () -> textField.requestFocusInWindow() );

上述代码将被放置在Event Dispatch Thread (EDT)的末尾,因此应在窗口可见后执行。

或者,您可以使用RequestFocusListener方法。

请注意,现在已经存在Java lambda,这在大多数情况下都是过度设计,但它仍然适用于设置模态对话框的焦点。


哇,它起作用了!事实上,我一开始使用的是JLabel,像“插入一些东西”,然后是JTextField。不知道我必须在窗口可见后使用该方法,也没有人提到过=/谢谢你啊。 - Zenith Blade
一个JLabel不可聚焦,所以你的文本框应该仍然会自动获得焦点。你的代码肯定还有其他问题。 - camickr
好的,我制作了一个示例,将JLabel全部删除后仍然无法聚焦到JTextField,这意味着您必须单击才能在其上写入。不知道出了什么问题,但requestFocusInWindow()起了作用。 - Zenith Blade
抱歉在发表评论之前没有完全尝试上述内容。为了澄清给任何阅读此文的人,使用答案中的两个示例将导致按钮成为默认选项,并且光标从 JTextBox 开始。 - jesric1029

1

这段代码可以正确地定位光标位置:textField.requestFocus();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接