【问题标题】:How can I make a Swing text area have the focus as soon as it is loaded?如何让 Swing 文本区域在加载后立即获得焦点?
【发布时间】:2011-04-21 14:50:34
【问题描述】:

我创建了一个简单的 Swing 面板,加载后会占据我的应用程序的整个窗口。它包含两个JTextAreas 和一些按钮。我希望在面板加载时其中一个文本区域具有焦点,以便用户可以立即开始输入,而不必先单击文本区域。我怎样才能做到这一点?

【问题讨论】:

  • 我故意不包括代码,因为我认为从长远来看,一般的“教我如何钓鱼”的答案会比只适合我的解决方案更好,但我可以添加一些根据要求。
  • 您描述的问题看起来很奇怪:大多数情况下,当显示面板时,第一个字段(基于 (x,y) 位置)会自动获得焦点:也许代码 sn-p 可以帮助展示你的经历;-)
  • @jfp,我其实很想知道这个;我用边框包围了场地并使用了JScrollPane。我最终会添加代码,但代码所在的机器似乎有硬盘故障的早期迹象,所以你可能不想等待......
  • @jfp,我收回来,我不打算添加代码。部分原因是 camickr 的答案对我来说是完美的(在提供工作代码和解释它为什么/如何工作方面),部分原因是我尝试生成一个独立的完整可编译代码示例来说明问题是永远的。
  • Togamus 完美,我也喜欢 camickr 的回答。

标签: java swing focus jtextarea


【解决方案1】:

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

如果这不是您想要获得焦点的组件,那么您需要在实现窗口后请求焦点。

Dialog Focus 示例显示了几种方法。

【讨论】:

    【解决方案2】:

    请参阅此处the Documentation,其中包含您正在搜索的内容(我认为):

    一个组件也可以被赋予 以编程方式聚焦,例如何时 它的包含框架或对话框是 变得可见。此代码 sn-p 显示 如何赋予特定组件 每次窗口获得焦点时 重点:

    //Make textField get the focus whenever frame is activated.
    frame.addWindowFocusListener(new WindowAdapter() {
        public void windowGainedFocus(WindowEvent e) {
            textField.requestFocusInWindow();
        }
    });
    

    【讨论】:

    • 这是我在询问之前尝试的最后一件事;它没有用。也就是说,将其放入似乎不会添加、删除或更改程序中的任何行为。
    【解决方案3】:

    只需要调用Jcomponent类的requestFocus方法,

    public void requestFocus()

    在您想要关注的组件上。 请确保在为其父组件调用 setVisible 之后调用此方法。

    例如:- 您有一个 Jframe,在其中添加了一个 JTextArea,因此在调用后您应该按以下顺序调用:-

    jframe.setVisible(true); jarea.requestFocus();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多