Solved

KeyListener

Posted on 1998-08-13
6
390 Views
Last Modified: 2010-08-05
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
Comment
Question by:AmyS
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
6 Comments
 

Expert Comment

by:tarlton
ID: 1232711
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
 

Author Comment

by:AmyS
ID: 1232712
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
 
LVL 4

Expert Comment

by:evijay
ID: 1232713
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
Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

 

Author Comment

by:AmyS
ID: 1232714
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
 
LVL 4

Accepted Solution

by:
evijay earned 40 total points
ID: 1232715
I am very sorry. You need to cast the result of getSource. It should be like this

 ((Component) (e.getSource())).transferFocus();
0
 
LVL 4

Expert Comment

by:evijay
ID: 1232716
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

Featured Post

[Webinar] Learn How Hackers Steal Your Credentials

Do You Know How Hackers Steal Your Credentials? Join us and Skyport Systems to learn how hackers steal your credentials and why Active Directory must be secure to stop them. Thursday, July 13, 2017 10:00 A.M. PDT

Question has a verified solution.

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

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…

615 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