如何在NetBeans GUI Builder中向多个组件添加相同的侦听器

时间:2012-08-24 22:24:54

标签: java user-interface netbeans

我使用NetBeans GUI Builder创建一个小应用程序。首先,我要说的是我可以手动编码所有内容并立即解决这个问题。但是,我想学习如何使用GUI Builder。这是我的警告,所有不使用它的建议都会得到一次投票。

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

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的命名内部类。这不会出现在事件处理程序组合框中。

如何为我的所有文本字段创建单个方法?

2 个答案:

答案 0 :(得分:3)

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

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

(Netbeans 7.3.1)

答案 1 :(得分:0)

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

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);
}