• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 403
  • Last Modified:

KeyListener

I know TextFields can travel by "Tab".  How can we make all TextFields traversable by pressing "Enter"?
Could you please give me an example code?
0
AmyS
Asked:
AmyS
  • 3
  • 2
1 Solution
 
tarltonCommented:
You need to add a keyListener to your text fields.  Here is an example:

JTextField m_textField;
JTextField m_secondTextField;
JTextField m_thirdTextField;
m_textField.addKeyListner(new HandleEnterPress());
m_secondTextField.addKeyListner(new HandleEnterPress());
m_thirdTextField.addKeyListner(new HandleEnterPress());

    /**
     * The CHandleEnterPress class controls the focus when the Enter key is
     * pressed.
     **/
      class CHandleEnterPress extends KeyAdapter
      {
          /**
           * called when any key is pressed
           **/
        public void keyPressed(KeyEvent e)
        {
            if (e.getKeyCode() == KeyEvent.VK_ENTER)
            {
                if (e.getSource() == m_textField)
                {
                    m_secondTextField.requestFocus();
                }
                else if (e.getSource() == m_secondTextField)
                {
                    m_thirdTextField.requestFocus();
                }
            }
        }
    }

0
 
AmySAuthor Commented:
tarlton,
Your code is good for a couple of TextFields. But I want to search for a better way which
can easily handle more than 20 TextFields traversable by pressing "Enter".
0
 
evijayCommented:
When enter key is pressed, the ActionEvent is generated. In the action listener's actionPerformed method, put a one liner. The code is below

public class TextAction implements ActionListener {
public void actionPerformed(ActionEvent e)
{
   e.getSource().transferFocus(); // moves to next field
}


in your code attach action listener as follows

TextAction ta = new TextAction();

for each text field tf add,

tf.addActionListener(ta);




Second method :

Extend TextField class

public class MyTextField extends TextField Implements ActionListener {
 public MyTextField (String text) {
  super(text);
  addActionListener(this);
 }
 public MyTextField () {
  super();
  addActionListener(this);
 }

public void actionPerformed(ActionEvent e)

{
   e.getSource().transferFocus(); // moves to next field
}




}
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
AmySAuthor Commented:
Hi Evijay,
When I wrote a small code to test your answer, I got an error message:
Method transferFocus() not found in class java.lang.Object.
         e.getSource().transferFocus();
Here is the test code:


   import java.awt.*;
   import java.awt.event.*;

   public class Test1 extends Panel
   {
       myTextField first, last, company, address, home, work;
       
       public Test1()
       {
         
           setBackground(Color.lightGray);

           setLayout(new GridLayout(7,2,5,5));

           add(new Label("First Name"));
           first = new myTextField("first_name");
           add(first);        
                   
           add(new Label("Last Name"));
           last = new myTextField("last_name");
           add(last);

           add(new Label("Company Name"));
           company = new myTextField("company_name");
           add(company);

           add(new Label("Address"));
           address = new myTextField("726 Forest Dr.");
           add(address);

           add(new Label("Home Phone #"));
           home = new myTextField("home_phone");
           add(home);
           
           add(new Label("Work Phone #"));
           work = new myTextField("work_phone");
           add(work);

         
       }
       
     
       
       public Dimension getPreferredSize()
       {
           return new Dimension(300, 200);
       }

       public static void main(String s[])
       {
           Frame frame = new Frame("Focus Example");
           Test1 panel = new Test1();

           frame.add(panel,"Center");
           frame.setSize(panel.getPreferredSize());
           frame.setVisible(true);
       }
       
     
   public class myTextField extends TextField implements ActionListener {
    public myTextField (String text) {
     super(text);
     addActionListener(this);
    }
    public myTextField () {
     super();
     addActionListener(this);
    }

   public void actionPerformed(ActionEvent e)

   {
      e.getSource().transferFocus(); // moves to next field
   }
       
     
   }
}





0
 
evijayCommented:
I am very sorry. You need to cast the result of getSource. It should be like this

 ((Component) (e.getSource())).transferFocus();
0
 
evijayCommented:
Here is working code :



                import java.awt.*;
                import java.awt.event.*;

                public class Test1 extends Panel
                {
                    myTextField first, last, company, address, home, work;
                     
                    public Test1()
                    {
                       
                        setBackground(Color.lightGray);

                        setLayout(new GridLayout(7,2,5,5));

                        add(new Label("First Name"));
                        first = new myTextField("first_name");
                        add(first);          
                                 
                        add(new Label("Last Name"));
                        last = new myTextField("last_name");
                        add(last);

                        add(new Label("Company Name"));
                        company = new myTextField("company_name");
                        add(company);

                        add(new Label("Address"));
                        address = new myTextField("726 Forest Dr.");
                        add(address);

                        add(new Label("Home Phone #"));
                        home = new myTextField("home_phone");
                        add(home);
                         
                        add(new Label("Work Phone #"));
                        work = new myTextField("work_phone");
                        add(work);

                       
                    }
                     
                   
                     
                    public Dimension getPreferredSize()
                    {
                        return new Dimension(300, 200);
                    }

                    public static void main(String s[])
                    {
                        Frame frame = new Frame("Focus Example");
                        Test1 panel = new Test1();

                        frame.add(panel,"Center");
                        frame.setSize(panel.getPreferredSize());
                        frame.setVisible(true);
                    }
                     
                   
                public class myTextField extends TextField implements ActionListener {
                 public myTextField (String text) {
                  super(text);
                  addActionListener(this);
                 }
                 public myTextField () {
                  super();
                  addActionListener(this);
                 }

                public void actionPerformed(ActionEvent e)

                {
                   ((Component)e.getSource()).transferFocus(); // moves to next field
                }
                     
                   
                }
             }

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now