【问题标题】:How do I add the same listener to multiple components in the NetBeans GUI Builder如何将相同的侦听器添加到 NetBeans GUI Builder 中的多个组件
【发布时间】:2012-08-20 11:46:59
【问题描述】:

我正在使用 NetBeans GUI Builder 创建一个小型应用程序。首先,我只想说我可以手动编写所有代码并立即解决这个问题。但是,我想学习如何使用 GUI Builder。这是我的警告,所有不使用它的建议都会被否决。

话虽如此,我目前的情况是我有几个JFormattedTextFields,如果用户输入格式无效的数据,我想在其中显示错误消息。在每种情况下,逻辑都是相同的。唯一的区别是根据预期的确切格式(即四位数年份、正整数等)显示不同的错误消息。我想简单地编写一个可以重复用于每个文本字段的侦听器。我为第一个文本框写了如下方法:

private void formattedTextFieldFocustLost(java.awt.event.FocusEvent evt) {
    JFormattedTextField source = (JFormattedTextField)evt.getComponent();

    if (!source.isEditValid()) {
        // TODO: Need a better error message.
        JOptionPane.showMessageDialog(this, "Invalid input.", "Input Error", JOptionPane.ERROR_MESSAGE);
        source.requestFocusInWindow();
    }
}

方法签名由 NetBeans 生成,并从扩展 FocusAdapter 的匿名内部类的生成中调用。现在,当我转到 NetBeans 中的设计视图并单击另一个组件的 focusLost 事件的组合框时,此方法名称不会显示。

我还尝试创建一个扩展 FocusAdapter 的命名内部类。这也不会显示在事件处理程序组合框中。

如何为所有文本字段创建一个方法?

【问题讨论】:

  • 会将其作为评论发布,因此您不能对我投反对票,但也许您根本不应该使用 FocusListeners,因为它们的级别非常低。对于这些情况,我一直更喜欢使用 InputVerifier。
  • @HovercraftFullOfEels 如果您想详细说明答案,请继续。我对其他选择持开放态度。我只是不想回答说“避免使用 NetBeans GUI Builder。手动编写代码 Swing 应用程序......”。与此同时,我会自己做一些研究;-)
  • 但如果我发布了答案,我将不得不做出这样的声明。这几乎是一种反射:)。另外,我不确定如何在 NetBeans 环境中设置 InputVerifiers。我只知道如何“手工”完成。
  • @HovercraftFullOfEels 好吧。我已经提取了 API 文档。我会进一步研究它,看看它是否符合我的需求。感谢您的建议!
  • 在摆弄 NetBeans 之后,我发现您似乎可以通过转到文本组件的“其他属性”列表来设置 InputVerifier,单击与 InputVerifier 关联的 ... 按钮属性,然后添加你的代码,比如new MyInputVerifier()。然后,您可以在源代码中为 MyInputVerifier 添加一个私有内部类来进行验证。

标签: java user-interface netbeans


【解决方案1】:

创建自己的方法,例如验证():

private void validate(JFormattedTextField source) {
    if (!source.isEditValid()) {
        // TODO: Need a better error message.
        JOptionPane.showMessageDialog(this, "Invalid input.", "Input Error", JOptionPane.ERROR_MESSAGE);
        source.requestFocusInWindow();
    }
}

然后从您通过 GUI 编辑器定义的各个侦听器调用此方法:

private void formattedTextFieldFocustLost(java.awt.event.FocusEvent evt) {
    JFormattedTextField source = (JFormattedTextField)evt.getComponent();
    validate(source);
}

【讨论】:

    【解决方案2】:

    如果您已经编写了处理程序,例如 btnActionPerformed,请复制名称。

    在设计视图中,右键单击要附加处理程序的组件 > 属性 > 事件 > “...”按钮 > 添加 > 将现有处理程序名称粘贴到空白字段中,然后单击确定。

    (Netbeans 7.3.1)

    【讨论】:

    • 感谢您回答这个老问题。我希望其他人会觉得它有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2013-08-18
    • 2012-05-15
    • 2011-08-21
    • 2013-03-09
    • 2011-12-04
    • 2014-07-13
    相关资源
    最近更新 更多