Java焦点遍历到新禁用的按钮
我对Java中的焦点遍历系统有一个问题。当我在应用程序窗格中的组件之间进行tab时,“一切正常”选项卡将焦点移动到下一个组件 我的一些组件在失去焦点时执行验证,如果验证返回错误,则屏幕保存按钮被禁用 当验证的组件后面跟着“保存”按钮时,就会出现我的问题 选项卡从已验证的组件中移除焦点,并开始异步过程,将焦点分配给通过“保存”按钮启用的下一个组件 接下来,我的验证开始并禁用“保存”按钮 异步过程随后完成,并尝试将焦点分配给现在已禁用的保存按钮 焦点现在被捕获,并且制表符不再移动焦点,因为实际上没有组件具有焦点Java焦点遍历到新禁用的按钮,java,validation,button,focus,Java,Validation,Button,Focus,我对Java中的焦点遍历系统有一个问题。当我在应用程序窗格中的组件之间进行tab时,“一切正常”选项卡将焦点移动到下一个组件 我的一些组件在失去焦点时执行验证,如果验证返回错误,则屏幕保存按钮被禁用 当验证的组件后面跟着“保存”按钮时,就会出现我的问题 选项卡从已验证的组件中移除焦点,并开始异步过程,将焦点分配给通过“保存”按钮启用的下一个组件 接下来,我的验证开始并禁用“保存”按钮 异步过程随后完成,并尝试将焦点分配给现在已禁用的保存按钮 焦点现在被捕获,并且制表符不再移动焦点,因为实际上没有
如果其他人遇到此问题,您是如何解决在焦点遍历事件开始之前执行验证和禁用的问题的?您可以使用InputVerifier验证文本字段。在这种情况下,焦点将错误地放回文本字段 或者你可以改变你的焦点听众来处理这种情况。比如:
FocusListener fl = new FocusAdapter()
{
public void focusLost(final FocusEvent e)
{
JTextField tf = (JTextField)e.getSource();
if (tf.getDocument().getLength() < 1)
{
System.out.println("Error");
button.setEnabled( false );
Component c = e.getOppositeComponent();
if (c instanceof JButton
&& c.isEnabled() == false)
{
tf.requestFocusInWindow();
}
}
else
button.setEnabled( true );
}
};