当前位置: 首页 > 面试题库 >

何时在Swing应用程序中显示无效输入的错误消息

席弘图
2023-03-14
问题内容

我正在使用JFormattedTextFieldfor格式化Swing应用程序的整数输入。无效输入的默认行为是悄悄地(即没有错误消息)将文本字段重置为其先前值。JOptionPane在将焦点返回到之前,我想显示一条错误消息JFormattedTextField

我最初的解决方案是FocusListener为我的文本字段实现。我考虑过将相同FocusListener子类的实例添加到每个实例,但是自从我使用NetBeansGUIBuilder以来就遇到了问题。@HovercraftFullOfEels建议我使用InputVerifier。我实现了以下自定义InputVerifier:

public class ValidTextFormatInputVerifier extends InputVerifier {

    @Override
    public boolean verify(JComponent jc) {
        return ((JFormattedTextField)jc).isEditValid();
    }
}

在进一步研究的同时,我得到了内部JFormattedTextField使用的印象InputVerifier。(不过,我还没有在任何地方明确声明这一点。)因此,我的习惯InputVerifier似乎是多余的。

更大的问题是,文本字段仍会静默重置,而不会出现任何错误消息。我可以在JOptionPane.showMessageDialog()这里加个电话。但是,这似乎不是显示错误消息的适当位置。它们InputVerifier不知道无效输入的确切性质,也不知道有效输入的格式,这对于提供有意义的错误消息更为重要。

我想到的第一个解决方案是添加一个构造函数,该构造函数采用String包含要显示的错误消息的参数。不过,这似乎将错误消息逻辑放在错误的位置。

是否存在用于错误处理和向用户提供消息的通用Java习惯用法?您如何建议我将应用程序设计为干净显示错误消息?另外,如果我决定使用其他平台(例如,命令行,移动设备等)来设计软件的接口,我希望能够重用我现有的代码库。(当然,由于这主要是一个UI问题,也许该要求并不像我在这里所希望的那样适用。)


问题答案:

我的第一意见是,每当失去文本字段焦点时,向用户显示JOptionPane都会对用户造成很大的困扰。当用户单击表单的“确定”按钮时,我会显示一条错误消息。该错误消息可以包含所有错误消息的列表,也可以仅包含第一个错误消息,并以错误为焦点。

另一种选择是使用常规JTextField并编写自己的自定义验证器。当焦点更改时,您的IntegerValidator(或其他实现)将验证输入字符串,并且UI可能在字段旁边显示错误或警告图标,这与某些Web应用程序相同。



 类似资料: