有一个文本字段,当失去焦点时,它将验证输入,如果没有传递,则打印出错误消息(简单地说,这里只有一个空检查)。文本字段旁边有一个按钮,单击它就会打印出文本。
正如我所尝试的,当输入一些文本然后单击按钮时,它会触发文本字段的焦点丢失事件和按钮事件。换句话说,它将首先进行验证,然后打印出输入的文本。
我的问题来了,如果验证未通过,防止打印文本的好方法是什么?或者如果验证未通过,是否有办法“忽略”按钮上的单击事件?
我尝试使用一个布尔标志来指示验证结果并在执行操作for按钮时检查标志,但我认为这不是一个好方法。因为我知道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();
}
}
让ui与用户通信总是有意义的。因此,当用户未输入任何内容时,可以将“please input a text”(请输入文本)显示为文本字段的默认文本。以下是此类自定义文本字段的代码:
public class TextFieldWithDefaultText extends JTextField implements FocusListener{
private final String hint;
public TextFieldWithDefaultText (String $text)
{
super($text);
this.hint = $text;
addFocusListener(this);
}
@Override
public void focusGained (FocusEvent $e)
{
if (this.getText().isEmpty())
{
super.setText("");
}
}
@Override
public void focusLost (FocusEvent $e)
{
if (this.getText().isEmpty())
{
super.setText(hint);
}
}
@Override
public String getText ()
{
String typed = super.getText();
return typed.equals(hint) ? "" : typed;
}
}
为按钮编写ActionListerner,如下所示:
JButton button = new JButton("Print Text");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(!textField.getText().isEmpty())
System.out.println(textField.getText());
}
});
和ur text Field实现应该是:
final TextFieldWithDefaultText textField = new TextFieldWithDefaultText ("please input a text");
希望这有助于:)
我在处理应用程序时也面临类似的问题。我如下所示解决了这个问题,我创建了一个抽象类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);
}
如果您需要处理Focus事件,您可以使Application ationFrame
或基本框架实现Focus usListener
。这是我解决问题的自定义实现,希望这有所帮助。
我尝试使用一个布尔标志来指示验证结果,并在执行按钮操作时检查该标志,但我认为这不是一个好的方法。我知道Swing中有一个事件调度线程来处理这些事件,我可以从这里取消这些事件吗? 下面是一段解释这个问题的代码:
我正在使用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 如有任何帮助,将不胜感激。谢谢你!