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



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

我最初的解决方案是为我的文本字段实现FocusListener。我曾考虑将相同FocusListener子类的实例添加到每个实例中,但由于使用NetBeans GUI Builder,因此遇到了问题@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应用程序相同。

我会看看JLayer(Java 7)或JXLayer(Java 6及以下)

这将允许你用各种不同的状态来装饰场地或形式。

至于什么时候。

我会从使用某种荧光笔开始,Dan建议使用图标,这是一个好主意,再加上JLayer/JXLayer,这将减少对表单的整体影响

我会等到用户尝试提交表单后再显示对话框&迫使焦点回到无效字段。

基本想法是允许用户在没有太多限制的情况下自由移动表单(因为并非所有人都以线性方式思考),但鼓励他们纠正他们在这一过程中产生的任何可能的错误,而不必等到他们提交表单才发现错误(想想你使用过的最糟糕的网络表单,不要这样做)

显然,如果他们试图提交有错误的表单,你会想要显示错误消息并突出显示第一个有问题的字段

对于CCD_ 16/CCD_;如何装饰组件

相关内容

最新更新