gpt4 book ai didi

java - 在 UI 上进行数据验证时如何处理 "ignore/discard"Swing UI 事件?

转载 作者:行者123 更新时间:2023-11-30 11:34:25 25 4
gpt4 key购买 nike

有一个文本字段,当失去焦点时,它会验证输入,如果没有通过,打印出错误消息(为了简单,这里只是一个空检查)。文本字段旁边有一个按钮,单击它会打印出文本。

正如我所尝试的,当输入一些文本然后单击按钮时,它会同时触发文本字段的焦点丢失事件和按钮事件。换句话说,它会先进行验证,然后打印出输入文本。

我的问题来了,如果验证未通过,防止打印出文本的好方法是什么?或者,如果验证未通过,是否有办法“忽略”按钮上的点击事件?

我尝试使用一个 boolean 标志来指示验证结果并在对按钮执行操作时检查该标志,但我认为这不是一个好方法。据我所知,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();
}
}

最佳答案

我在处理应用程序时遇到了类似的问题。我像下面这样解决了我创建了一个抽象类 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。这是我解决问题的自定义实现,希望对您有所帮助。

关于java - 在 UI 上进行数据验证时如何处理 "ignore/discard"Swing UI 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15677798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com