当前位置: 首页 > 知识库问答 >
问题:

在UI上进行数据验证时,如何“忽略/丢弃”Swing UI事件?

司徒焕
2023-03-14

我尝试使用一个布尔标志来指示验证结果,并在执行按钮操作时检查该标志,但我认为这不是一个好的方法。我知道Swing中有一个事件调度线程来处理这些事件,我可以从这里取消这些事件吗?

下面是一段解释这个问题的代码

public class SimpleDemo
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel content = new JPanel(new FlowLayout());
        frame.setContentPane(content);

        final JTextField textField = new JTextField(10);
        textField.addFocusListener(new FocusAdapter()
        {
             @Override
             public void focusLost(FocusEvent e)
             {
                 String text = textField.getText();
                 // do some validation here, if not validated 
                 // do not trigger the event on button.
                 if ("".equals(text))
                 {
                     System.out.print("please input a text!");
                 }
             }
        });
        content.add(textField);

        JButton button = new JButton("Print Text");
        button.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                // action performed for button
                String text = textField.getText();
                System.out.println(text);
            }
        });
        content.add(button);

        frame.setVisible(true);
        frame.pack();
    }
}

共有1个答案

夏高朗
2023-03-14

我在处理一个应用程序时也面临类似的问题。我解决了这个问题,如下所示,我创建了一个抽象类applicationframe,应用程序中的每个框架都对其进行扩展

public abstract class ApplicationFrame extends JFrame implements ActionListener {
    @Override
    final public void actionPerformed(ActionEvent event) {
        if(validateInput()){
             performAction(event);
        }
    }

    /*
    * Sub class should override this method to receive any action
    */
    protected void performAction(ActionEvent event) {};

    /*
     * Sub class should override this method to perform validation
    */
    abstract protected boolean validateInput();
}

现在所有帧都将扩展此基本帧,如下所示:

public class Frame1 extends ApplicationFrame{
    @Override
    protected void performAction(ActionEvent event) {
        // perform action
    }
    @Override
    protected boolean validateInput() {
        // return true or false depending upon the validation results
    }
    // if you want to add Action Listener, you need to add like this:
    btnSomeButton.addActionListener(this);
}

如果需要处理焦点事件,可以让ApplicationFrame或基本框架实现FocusListener。这是我的自定义实现解决的问题,希望对此有所帮助。

 类似资料:
  • 有一个文本字段,当失去焦点时,它将验证输入,如果没有传递,则打印出错误消息(简单地说,这里只有一个空检查)。文本字段旁边有一个按钮,单击它就会打印出文本。 正如我所尝试的,当输入一些文本然后单击按钮时,它会触发文本字段的焦点丢失事件和按钮事件。换句话说,它将首先进行验证,然后打印出输入的文本。 我的问题来了,如果验证未通过,防止打印文本的好方法是什么?或者如果验证未通过,是否有办法“忽略”按钮上的

  • 我正在使用Spring MVC制作一个webapp 我的用户模型 我的注册有所有这些字段的表单输入,但是登录只使用用户名和密码。项目需要所有字段。我将登录表单设置为使用接受用户名和密码的构造函数。提交时,它遵循所有用户模型变量的数据验证。登录控制器: 是否可以告诉方法忽略除用户名和密码之外的所有变量?

  • 如果某个接口不需要进行验证工作,可以在@Api注解上设置属性ignoreValidate=true(默认false)。这样调用接口时,不会进行验证操作。 同样的,在@ApiService注解里也有一个对应的ignoreValidate属性,设置为true的话,Service类下面所有的接口都忽略验证。 忽略所有接口验证 设置ApiConfig.setIgnoreValidate(true),所有接

  • 我要求Python从CSV数据列中打印最小数量,但最上面的行是列号,我不希望Python考虑最上面的行。我如何确保Python忽略第一行? 这是目前为止的代码: 你能解释一下你在做什么,而不仅仅是给出代码吗?我对Python非常陌生,希望确保我了解所有内容。

  • 我正在尝试调用一个部署在Linux服务器上的web服务,该服务器具有在.net core中开发并部署在IIS服务器(Windows Server 2012)上的应用程序的自签名证书。 但是当我试图调用endpoint时,抛出了下一个错误: “消息”: “无法建立 SSL 连接,请参阅内部异常。”, “描述”: “内部错误: 系统.安全.身份验证.身份验证异常: 身份验证失败,请参阅内部异常。---

  • 我试图在kotlin中为我的数据模型添加验证,使用注释很容易实现简单的字段。但是,我正在努力做同样的收藏。 我已经在这里将问题上传到了github 如有任何帮助,将不胜感激。谢谢你!