焦点更改前的Java Swing调用方法

焦点更改前的Java Swing调用方法,java,swing,Java,Swing,我正在使用一个包含JTextField的java swing表单。文本字段需要输入验证,验证在字段失去焦点时执行。i、 e单击除字段本身之外的任何软件 表单还包含一个用于清除(取消)表单的JButton。现在,每当我按下取消按钮并且Textfield是当前关注的组件时,就会调用验证功能。这不应该发生 我尝试了InputVerifier和Focuslistener 有没有办法知道是什么组件导致焦点发生变化的?您可以使用FocusListener对focusLost事件做出反应。在那里,您可以通过F

我正在使用一个包含
JTextField
java swing表单。文本字段需要输入验证,验证在字段失去焦点时执行。i、 e单击除字段本身之外的任何软件

表单还包含一个用于清除(取消)表单的
JButton
。现在,每当我按下取消按钮并且
Textfield
是当前关注的组件时,就会调用验证功能。这不应该发生

我尝试了
InputVerifier
Focuslistener


有没有办法知道是什么组件导致焦点发生变化的?

您可以使用
FocusListener
focusLost
事件做出反应。在那里,您可以通过
FocusEvent
中的
getOppositeComponent()
检索焦点的目标。如果目标是清除/取消/任何按钮,则不执行任何操作,否则验证

这是一个非常基本的例子:

JTextField textField = new JTextField(15);
textField.addFocusListener(new FocusAdapter() {

    @Override
    public void focusLost(FocusEvent e) {

        Component comp = e.getOppositeComponent();
        if (comp instanceof JButton) {
            JButton button = (JButton) comp;
            String buttonText = button.getText();
            if (buttonText.equals("Cancel")) {
                return;
            }
        }

        // do the validation
        System.out.println("validate");
    }

});

实际上,camickr的比上面我的要简单得多。我不知道有内置的解决方案

这很好,但是表单包含一个用于清除(取消)表单的JButton

您可以使用:

clearButton.setVerifyInputWhenFocusTarget(false);

防止在单击按钮时调用<代码>输入程序> />代码。

帮助我们帮助您,请考虑创建和发布您的链接(请参阅链接)。这是OP问题的答案。我需要一些与FooSoCube工作的东西。camickr的解决方案仅适用于上述InputVerifier。