Code-Apprentice
Code-Apprentice

Reputation: 83577

How do I add the same listener to multiple components in the NetBeans GUI Builder

I am using the NetBeans GUI Builder to create a small application. To begin, let me just say that I can code everything by hand and solve this problem right away. However, I want to learn how to use the GUI Builder. This is my warning that all suggestions to not use it will get a down vote.

With that said, my current situation is that I have several JFormattedTextFields where I want to display an error message if the user enters data with an invalid format. The logic is the same in every case. The only difference will be to display a different error message depending on the exact formatting expected (i.e. a four digit year, a positive integer, etc.). I would like to simply write one listener that can be reused for every text field. I wrote the following method for the first text box:

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

The method signature is generated by NetBeans and is called from a generated of an anonymous inner class which extends FocusAdapter. Now when I go to the Design view in NetBeans and click on the combo box for the focusLost event of another component, this method name doesn't show up.

I also tried to create a named inner class which extends FocusAdapter. This doesn't show up in the event handler comboboxes, either.

What do I do to create a single method for all of my text fields?

Upvotes: 1

Views: 2029

Answers (2)

mxl_
mxl_

Reputation: 190

If you have written the handler already, say btnActionPerformed, copy the name.

In design view, right-click the component where you want to attach the handler > Properties > Events > "..." button > Add > paste existing handler name in blank field and click OK.

(Netbeans 7.3.1)

Upvotes: 3

user330315
user330315

Reputation:

Create your own method, e.g. validate():

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

then call this method from the individual listeners that you define through the GUI Editor:

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

Upvotes: 0

Related Questions