【问题标题】:Java Focus Traversal to newly disabled buttonJava焦点遍历到新禁用的按钮
【发布时间】:2010-10-28 10:31:24
【问题描述】:

Java 中的焦点遍历系统有问题。当我在应用程序窗格中的组件之间切换时,一切正常 Tab 将焦点移动到下一个组件。

我的一些组件在失去焦点时执行验证,如果验证返回错误,则屏幕保存按钮被禁用。

当验证的组件后面跟着保存按钮时,就会出现我的问题。

选项卡从已验证的组件中移除焦点,并开始将焦点分配给下一个启用的组件(保存按钮)的异步过程

接下来我的验证启动并禁用保存按钮

然后异步过程完成并尝试将焦点分配给现在禁用的“保存”按钮。

现在焦点被困住,并且 Tab 键不再移动焦点,因为实际上没有组件具有焦点。

有没有其他人遇到过这个问题,您是如何解决在焦点遍历事件开始之前执行验证和禁用的问题的?

【问题讨论】:

    标签: java validation button focus


    【解决方案1】:

    您可以使用 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 );
        }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多