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

Cod*_*ice 2 java error-handling user-interface swing

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

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

public class ValidTextFormatInputVerifier extends InputVerifier {

    @Override
    public boolean verify(JComponent jc) {
        return ((JFormattedTextField)jc).isEditValid();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

是否有用于错误处理和向用户提供消息的通用 Java 习惯用法?您如何建议我设计我的应用程序以干净地显示错误消息?此外,如果我决定为使用不同平台(例如命令行、移动设备等)的软件设计界面,我希望能够尽可能多地重用现有代码库。(当然,由于这主要是 UI 问题,因此该要求可能不像我在这里希望的那样强烈。)

Dan*_* D. 5

我的第一个意见是,每当文本字段焦点丢失时向用户显示 JOptionPane 对用户来说可能非常烦人。当用户点击表单的 OK 按钮时,我会显示一条错误消息。错误消息可以包含所有错误消息的列表,也可以只包含第一个,并聚焦带有错误的元素。

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