Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTextField上设置光标_Java_Swing_Focus_Jtextfield - Fatal编程技术网

Java 在JTextField上设置光标

Java 在JTextField上设置光标,java,swing,focus,jtextfield,Java,Swing,Focus,Jtextfield,我正在用Java制作一个使用JTextField的小应用程序。现在,我想,只要我运行应用程序,光标就会自动放进去,这样用户就不必点击它然后写文本。我在网上找到的几乎所有东西都试过了:setCaretPosition(0)、grabFocus()、requestFocusInWindow()或requestFocus(),但都不起作用!我很绝望,你能帮我解决这个问题吗?非常感谢默认情况下,焦点将转到窗口上的第一个组件 如果文本字段不是第一个组件,则可以使用: textField.requestFo

我正在用Java制作一个使用JTextField的小应用程序。现在,我想,只要我运行应用程序,光标就会自动放进去,这样用户就不必点击它然后写文本。我在网上找到的几乎所有东西都试过了:setCaretPosition(0)、grabFocus()、requestFocusInWindow()或requestFocus(),但都不起作用!我很绝望,你能帮我解决这个问题吗?非常感谢

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

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

textField.requestFocusInWindow();
但是,必须在窗口可见后调用此方法

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

EventQueue.invokeLater( () -> textField.requestFocusInWindow() );
上述代码将放在
事件调度线程(EDT)
的末尾,因此它应该在窗口可见后执行

或者,您可以使用来自的
RequestFocusListener
方法


注意,既然Java lambda已经存在,这在大多数情况下都是多余的,但是它仍然有一个地方可以用来设置模式对话框上的焦点。

这对于光标位置来说是正确的
textField.requestFocus()

可能的复制有点困难,因为您实际上几乎不知道应用程序何时可供用户使用。您可以尝试使用
SwingUtilities.invokeLater
并进行
requestFocusInWindow
调用…哇,成功了!事实上,我首先使用了JLabel,比如“Insert something”,然后是JTextField。我不知道我必须在窗口可见后使用该方法,也没有人提到它=/Thank manA JLabel不可聚焦,因此您的文本字段仍应自动获得焦点。你的代码肯定还有其他问题。我举了一个例子,删除了JLabel,但JTextField仍然没有被关注,这意味着你必须单击然后在上面写。不知道出了什么问题,但requestFocusInWindow()起了作用。很抱歉,在发送评论之前没有完全尝试上述操作。为了向阅读本文的人澄清,在答案中使用这两个示例将导致按钮都是默认按钮,光标从JTextBox内部开始。