Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 279
  • Last Modified:

Button Listener

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Chapter636 extends JApplet
{
      private static final long serialVersionUID = 1L;
      public void init()
      {
            Container Form = getContentPane();
            Form.setLayout(new BorderLayout());
            JButton Calculate = new JButton("Calculate");
            Form.add(Calculate,BorderLayout.SOUTH);
            JPanel Panel = new JPanel();
            final JTextField Base = new JTextField("Base",5);
            final JTextField Exp = new JTextField("Exp",5);
            Panel.add(Base,BorderLayout.NORTH);
            Panel.add(Exp,BorderLayout.SOUTH);
            Form.add(Panel,BorderLayout.NORTH);
            Calculate.addActionListener(
                        new ActionListener()
                        {
                                    public void actionPerformed(ActionEvent e)
                                    {
                                          if (IsNum(Base.getText()) && IsNum(Exp.getText()))
                                          {
                                                int B,E;
                                                B = Integer.parseInt(Base.getText());
                                                E = Integer.parseInt(Exp.getText());
                                                JOptionPane.showMessageDialog(null,B +"^" + E
                                                            +"=" + Exp(B,E));
                                          }
                                          else
                                                JOptionPane.showMessageDialog(null,
                                                            "Numeric input only! No negatives, no decimals.");
                                    }
                        });
      }
      private boolean IsNum(String Str)
      {
            for(int i=0;i<Str.length();i++)
            {
                  if ((int)Str.charAt(i) <48 || (int)Str.charAt(i) > 57)
                        return false;
            }
            return true;
      }
      private int Exp(int NBase,int NExp)
      {
            if(NExp <1)
                  return 1;
            if (NExp >1)
            {
                  NBase = NBase * Exp(NBase,NExp-1);
            }
            return NBase;
      }
}

In the above completed application, how would I move the action listener to be its own class rather than disturbing the flow
of code in method init?
0
List244
Asked:
List244
  • 6
  • 4
1 Solution
 
CEHJCommented:
You have two options:

1. Use a private named class that implements ActionListener
2. Make you applet implement ActionListener

The second is simpler
0
 
CEHJCommented:
2.

Calculate.addActionListener(this);

and have the actionPerformed method as a method of your applet
0
 
List244Author Commented:
I have been unable to accomplish either of these methods, can you show a more specific example?
Maybe an implementation to my code, or even a smaller example which implements a button with a
detached listener?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
CEHJCommented:
>>I have been unable to accomplish either of these methods, can you show a more specific example?

What was the problem? There's really nothing more to it than the code in my last comment
0
 
List244Author Commented:
Well, take a look at this:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public  class Chapter636 extends JApplet
{
      //Not sure on the below line, Eclipse put it there..
      private static final long serialVersionUID = 1L;
      public void init()
      {
            Container Form = getContentPane();
            Form.setLayout(new BorderLayout());
            JButton Calculate = new JButton("Calculate");
            Form.add(Calculate,BorderLayout.SOUTH);
            JPanel Panel = new JPanel();
            final JTextField Base = new JTextField("Base",5);
            final JTextField Exp = new JTextField("Exp",5);
            Panel.add(Base,BorderLayout.NORTH);
            Panel.add(Exp,BorderLayout.SOUTH);
            Form.add(Panel,BorderLayout.NORTH);
            final JLabel Label = new JLabel("Result:");
            Form.add(Label,BorderLayout.CENTER);
            Calculate.addActionListener(this); //The method addActionListener(ActionListener) in the type AbstractButton is not
                                //is not applicapable for the arguments (Chapter636)
      }

      public void actionPerformed(ActionEvent e)
      {
            if (IsNum(Base.getText()) && IsNum(Exp.getText()))
            {
                  int B,E;
                  B = Integer.parseInt(Base.getText());
                  E = Integer.parseInt(Exp.getText());
                  Label.setText("Result: " + B + "^" + E +
                              " = " + Exp(B,E));
                  //JOptionPane.showMessageDialog(null,B +"^" + E
                              //+"=" + ;
            }
            else
                  JOptionPane.showMessageDialog(null,
                              "Numeric input only! No negatives, no decimals.");
      }
      private boolean IsNum(String Str)
      {
            for(int i=0;i<Str.length();i++)
            {
                  if ((int)Str.charAt(i) <48 || (int)Str.charAt(i) > 57)
                        return false;
            }
            return true;
      }
      private int Exp(int NBase,int NExp)
      {
            if(NExp <1)
                  return 1;
            if (NExp >1)
            {
                  NBase = NBase * Exp(NBase,NExp-1);
            }
            return NBase;
      }
}

There is an error commented above:
//The method addActionListener(ActionListener) in the type AbstractButton is not
                                //is not applicapable for the arguments (Chapter636)

And, all items of the form become inaccessible to the listener, would that be fixed by a more global-scope, or is there a better way?
0
 
CEHJCommented:
Replace

>>public  class Chapter636 extends JApplet

with

public  class Chapter636 extends JApplet implements ActionListener
0
 
List244Author Commented:
Okay, that works.

If I were to add another button, would there be a way to differentiate which was clicked?
0
 
CEHJCommented:
Yes

public void actionPerformed(ActionEvent e) {
    Object initiator = e.getSource();
    if (initiator == buttonA) {
        //
    }
    else if (initiator == buttonB) {
        //
    }
}
0
 
List244Author Commented:
That works, thanks.
0
 
CEHJCommented:
:-)
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now