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

标签 java swing user-interface error-handling

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

我最初的解决方案是为我的文本字段实现FocusListener。我考虑过向每个子类添加相同 FocusListener 子类的实例,但由于我使用 NetBeans GUI Builder,所以遇到了问题。 @HovercraftFullOfEels suggested我使用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并编写您自己的自定义 validator 。当焦点发生变化时,您的 IntegerValidator(或其他实现)将验证输入字符串,并且 UI 可以在字段旁边显示错误或警告图标,就像某些 Web 应用程序所做的那样。

关于java - 何时在 Swing 应用程序中显示无效输入的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165355/

相关文章:

java - 在java中读取文件时如何跳过回车符作为换行符

java - 将 onclick 监听器添加到 fragment 的 xml 中的按钮

java - Android自定义点击监听器内联与字段减速为什么

java - swing自定义布局-组件包裹和高度计算

c++ - Qt - 不完整类型的无效使用 'class QScrollBar' - 向文本编辑小部件添加水平滚动条

java - Netty 中的 Channel.isWritable 通知

java - JButtons 仅在鼠标悬停时起作用

java - JTree 中的 JTextField - 使其可编辑

android - 轻量级跨平台C GUI(OpenGL)

java - 将 conways 代码与 gui 结合起来