如何创建不关注Window的组件

时间:2010-08-12 20:36:11

标签: java swing focus

我有一个带有FocusListener的JTextField,每当textfield失去焦点时调用textfield.grabFocus()。但不幸的是,它允许父窗口对用户操作做出反应。有没有办法不使用JTextField方法将焦点放在Window上?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么在此字段需要关注时,您不希望程序上的任何其他控件可用。问题是,每个对象可能至少有一个事件监听器等待某些操作发生,并将你的注意力从你身上偷走。

您可以通过为每个对象设置setFocusable(false)来使所有对象无法聚焦,但这仍然允许捕获事件。

我覆盖/替换(或者可能完全删除,如果确实有必要)所有其他对象上的事件侦听器,只在满足适当条件时执行操作(当对象不需要专注,如果发生这种情况)。如果被覆盖/替换,则每个侦听器可以在不满足这些条件的情况下将焦点返回到JTextField。

此外,最好使用requestFocus()requestFocusInWindow()代替grabFocus()。有关详细信息,请参阅JComponent grabFocus()JComponent requestFocus()