Solved

Button Listener

Posted on 2006-07-05
10
242 Views
Last Modified: 2010-03-31
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
Comment
Question by:List244
  • 6
  • 4
10 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 17045521
You have two options:

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

The second is simpler
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 250 total points
ID: 17045535
2.

Calculate.addActionListener(this);

and have the actionPerformed method as a method of your applet
0
 
LVL 8

Author Comment

by:List244
ID: 17045645
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
 
LVL 86

Expert Comment

by:CEHJ
ID: 17045667
>>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
 
LVL 8

Author Comment

by:List244
ID: 17045728
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 86

Expert Comment

by:CEHJ
ID: 17045743
Replace

>>public  class Chapter636 extends JApplet

with

public  class Chapter636 extends JApplet implements ActionListener
0
 
LVL 8

Author Comment

by:List244
ID: 17045824
Okay, that works.

If I were to add another button, would there be a way to differentiate which was clicked?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 17045847
Yes

public void actionPerformed(ActionEvent e) {
    Object initiator = e.getSource();
    if (initiator == buttonA) {
        //
    }
    else if (initiator == buttonB) {
        //
    }
}
0
 
LVL 8

Author Comment

by:List244
ID: 17045931
That works, thanks.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 17045953
:-)
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now