【问题标题】:Set Cursor On A JTextField在 JTextField 上设置光标
【发布时间】:2013-09-25 09:03:28
【问题描述】:

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

【问题讨论】:

  • 这有点困难,因为您实际上很少或根本不知道应用程序何时可供用户使用。您可以尝试使用SwingUtilities.invokeLater 并拨打requestFocusInWindow 电话...

标签: java swing focus jtextfield


【解决方案1】:

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

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

textField.requestFocusInWindow();

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

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

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

上面的代码将放在Event Dispatch Thread (EDT)的末尾,所以它应该在窗口可见后执行。

或者,您可以使用Dialog Focus 中的RequestFocusListener 方法。

注意,既然 Java lambda 已经存在,在大多数情况下这将是多余的,但它仍然可以用于设置模式对话框的焦点。

【讨论】:

  • 哇,成功了!实际上,我首先使用的是 JLabel,例如“插入一些东西”,然后是 JTextField。不知道我必须在窗口可见后使用该方法,也没有人提到它=/谢谢男人
  • JLabel 不可聚焦,因此您的文本字段仍应自动获得焦点。您的代码一定有其他问题。
  • 好吧,我做了一个例子,完全删除了 JLabel,但 JTextField 仍然没有聚焦,这意味着您必须单击然后在其上书写。不知道出了什么问题,但 requestFocusInWindow() 有效。
  • 我很抱歉在发送评论之前没有完全尝试上述内容。为了澄清任何阅读此内容的人,使用答案中的两个示例将导致按钮成为默认按钮,并且光标在 JTextBox 内开始。
【解决方案2】:

这适用于光标位置 textField.requestFocus();

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多