我有一个带有FocusListener的JTextField,每当textfield失去焦点时调用textfield.grabFocus()。但不幸的是,它允许父窗口对用户操作做出反应。有没有办法不使用JTextField方法将焦点放在Window上?
答案 0 :(得分:0)
如果我理解正确,那么在此字段需要关注时,您不希望程序上的任何其他控件可用。问题是,每个对象可能至少有一个事件监听器等待某些操作发生,并将你的注意力从你身上偷走。
您可以通过为每个对象设置setFocusable(false)
来使所有对象无法聚焦,但这仍然允许捕获事件。
我覆盖/替换(或者可能完全删除,如果确实有必要)所有其他对象上的事件侦听器,只在满足适当条件时执行操作(当对象不需要专注,如果发生这种情况)。如果被覆盖/替换,则每个侦听器可以在不满足这些条件的情况下将焦点返回到JTextField。
此外,最好使用requestFocus()
或requestFocusInWindow()
代替grabFocus()
。有关详细信息,请参阅JComponent grabFocus()和JComponent requestFocus()。