将焦点设置为文本字段

我有一个用netbeans开发的应用程序,我想在显示一个面板时将焦点设置到某个jTextField 。 我已阅读了一些post,并尝试了各种方法,但没有工作。 其中一个主要问题是放置所需代码的位置,我相信我的情况是this.txtMessage.requestFocusInWindow();

有一些post表明使用了Window Listener,但是由于netbeans已经生成了GUI,我无法看到如何实现接口,因为我无法编辑创建jPANEL等的代码。整个事情非常令人沮丧,我真的不相信这应该是那么困难。

就像测试一样,我添加了requestFocusInWindow(); 到面板上的按钮,它确实将焦点设置为所需的输入。

我有一个类似的场景,我需要在显示面板时将焦点设置在面板内的文本框中。 面板在应用程序启动时加载,因此我无法在构造函数中设置焦点。 由于面板没有被加载或被关注显示,这意味着我没有事件来发起焦点请求。

为了解决这个问题,我在main中添加了一个全局方法,该方法在面板中调用了一个方法,该方法在文本区域上调用requestFocusInWindow() 。 在调用show 之后 ,我显示面板的按钮中调用了global方法。 这意味着将显示面板,然后在显示面板后指定焦点的文本区域。 希望有意义和有帮助!

此外,您可以通过在设计视图中右键单击对象并选择自定义代码来编辑大多数自动生成的代码,但我不认为它允许您编辑面板。

我不确定我是否在这里遗漏了一些东西,但是没有理由不能为你的面板添加一个监听器。

在Netbeans中,只需点击编辑器窗口左上角的“Source”按钮,即可编辑大部分代码。 实际的布局代码大多是锁定的,但如果需要,您甚至可以自定义。

据我所知, txtMessage.requestFocusInWindow()应该设置第一次显示窗口时的默认焦点。 如果要在窗口显示后请求焦点,则应使用txtMessage.requestFocus()

对于测试,您只需在构造函数中添加一个侦听器:

 addWindowListener(new WindowAdapter(){ public void windowOpened( WindowEvent e){ txtMessage.requestFocus(); } }); 

在JFrame或JDialog中,您总是可以覆盖setVisible()方法,它运行良好。 我没有试过JPanel,但可以替代。

 @Override public void setVisible(boolean value) { super.setVisible(value); control.requestFocusInWindow(); } 

我永远玩弄了这个,终于找到了似乎永远有效的东西!

  textField = new JTextField() { public void addNotify() { super.addNotify(); requestFocus(); } }; 

对我来说,最简单的方法是使用component.requestFocus(); line, setVisible(true); 在框架或面板构造函数的底部。

在创建所有组件之后,这可能与要求焦点有关,因为在请求焦点请求后创建新组件将使组件松散焦点,并将焦点转移到新创建的组件上。 至少,这就是我的假设。

以上都不适合我,因为我的窗口是JPopupMenu

做的是什么:

 addAncestorListener(new AncestorListener() { @Override public void ancestorAdded(AncestorEvent ae) { myEdit.requestFocus(); } // ... other ancestor listener methods } 

我是通过在textField上设置AncesterAdded事件和在窗口中设置请求焦点来实现的。

如果使用Netbeans创建GUI ,还可以插入一些自编写的代码。 只需选择一个元素(可能是按钮,面板或窗口),然后使用“属性” – “对话框”中的“代码”选项卡。

在那里,您可以为创建过程的各个部分插入前置代码和后置代码。

我认为窗口的“After-All-Set-Code”字段是您的代码的好地方,或者您可以将它绑定到文本的事件(“Properties”–dialog – >“Events”)“ componentShown ”场/面板。