焦点更改前的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。