Solved

How do I set the focus to a component ?

Posted on 1998-06-24
6
186 Views
Last Modified: 2010-05-18
I want to give the focus to a textfield. I tried using requestFocus method but didn't work. I am using JDK 1.1 and Swing 1.0.2.
0
Comment
Question by:incah
[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
  • 4
  • 2
6 Comments
 
LVL 5

Accepted Solution

by:
fontaine earned 50 total points
ID: 1223748
requestFocus() set focus on the receiving component if isRequestFocusEnabled returns true.
Invoke setRequestFocusEnabled() to be sure that this condition is met. If this does not work
setCaretPosition(0) should give you what you want. If not again, please post a piece of code representative of the problem that we can recompile, test and make it work.


 
0
 

Author Comment

by:incah
ID: 1223749
None of your proposals worked. Here is the code:

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import com.sun.java.swing.*;
import com.sun.java.swing.event.*;

public class SwingApp extends JFrame implements ActionListener,CaretListener {
  JPanel p1,p2;
  JLabel l1,l2;
  JButton b1,b2;
  JTextField tf1,tf2;
  FileJComboBox fcb1;
  Connection con;
  public SwingApp() {
    Container contentPane = getContentPane();
    p1=new JPanel();
    p2=new JPanel(new GridLayout(0,1));

    p1.add(l1=new JLabel("Database Name",SwingConstants.LEFT));
    p1.add(tf1=new JTextField(50));
    p1.add(b1=new JButton("Open"));
    p1.add(b2=new JButton("Close"));
    contentPane.add("Center",p1);

    p2.add(l2=new JLabel(" ",SwingConstants.CENTER));
    contentPane.add("South",p2);

    b1.setEnabled(false);
    b2.setEnabled(false);
    tf1.requestFocus();
    tf1.addCaretListener(this);
    tf1.addActionListener(this);
    b1.addActionListener(this);
    b2.addActionListener(this);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        dispose();
        System.exit(0);
      }
    });
  }

  public void actionPerformed(ActionEvent e) {
      if (e.getSource()==b1 || e.getSource()==tf1) {
      try {
         con=DriverManager.getConnection("jdbc:odbc:"+tf1.getText());
         l2.setText("SUCCESS!");
         tf1.setEnabled(false);
         b1.setEnabled(false);
         b2.setEnabled(true);
      } catch(SQLException sqle) {
        l2.setText("Could not open: "+tf1.getText());
        return;
      }
      } else if (e.getSource()==b2) {
      try {
        con.close();
      } catch(SQLException sqle) {
      }
      con=null;
      tf1.setEnabled(true);
      b1.setEnabled(true);
      b2.setEnabled(false);
      l2.setText("");
      }
  }

  public void caretUpdate(CaretEvent e) {
    if (tf1.getText().equals(""))
      b1.setEnabled(false);
    else
      b1.setEnabled(true);
  }

  public static void main(String[] args) {
    SwingApp window = new SwingApp();
   
    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      DriverManager.setLogStream(null);
    } catch(ClassNotFoundException cnfe) {
      System.err.println("Class not found");
      return;
    }

    window.setTitle("Java Application");
    window.pack();
    window.setVisible(true);
  }
}


0
 
LVL 5

Expert Comment

by:fontaine
ID: 1223750
I have recompiled and run your code. The focus is OK when I start the app. When the database
does not exist, for example, the message appears and the focus is lost for the textfield. I
suppose that this is what annoy you. The following change fixes the "problem".

Before:

 } catch(SQLException sqle) {
      l2.setText("Could not open: "+tf1.getText());
      return;
}

After:

} catch(SQLException sqle) {
     l2.setText("Could not open: "+tf1.getText());
     tf1.requestFocus();
     return;
}

The caret position will be at the end of the text entered in the query. If you want to have it at
the beginning:

} catch(SQLException sqle) {
     l2.setText("Could not open: "+tf1.getText());
     tf1.requestFocus();
     tf1.setCaretPosition(0);
     return;
}
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.

 
LVL 5

Expert Comment

by:fontaine
ID: 1223751
I have recompiled and run your code. The focus is OK when I start the app. When the database
does not exist, for example, the message appears and the focus is lost for the textfield. I
suppose that this is what annoy you. The following change fixes the "problem".

Before:

 } catch(SQLException sqle) {
      l2.setText("Could not open: "+tf1.getText());
      return;
}

After:

} catch(SQLException sqle) {
     l2.setText("Could not open: "+tf1.getText());
     tf1.requestFocus();
     return;
}

The caret position will be at the end of the text entered in the query. If you want to have it at
the beginning:

} catch(SQLException sqle) {
     l2.setText("Could not open: "+tf1.getText());
     tf1.requestFocus();
     tf1.setCaretPosition(0);
     return;
}
0
 

Author Comment

by:incah
ID: 1223752
When I run this program the focus is not OK. It is not in the textfield as it should be.
0
 
LVL 5

Expert Comment

by:fontaine
ID: 1223753
Here is the full code I have tested. Try it on your system. The focus remains in textfield on
my system (Swing 1.0.2 & JDK 1.1.5 on Win NT 4.0).

import java.awt.*;
     import java.awt.event.*;
     import java.sql.*;
     import com.sun.java.swing.*;
     import com.sun.java.swing.event.*;

     public class SwingApp extends JFrame implements ActionListener,CaretListener {
       JPanel p1,p2;
       JLabel l1,l2;
       JButton b1,b2;
       JTextField tf1,tf2;
//       FileJComboBox fcb1;
//       Connection con;
       public SwingApp() {
         Container contentPane = getContentPane();
         p1=new JPanel();
         p2=new JPanel(new GridLayout(0,1));

         p1.add(l1=new JLabel("Database Name",SwingConstants.LEFT));
         p1.add(tf1=new JTextField(50));
         p1.add(b1=new JButton("Open"));
         p1.add(b2=new JButton("Close"));
         contentPane.add("Center",p1);

         p2.add(l2=new JLabel(" ",SwingConstants.CENTER));
         contentPane.add("South",p2);

         b1.setEnabled(false);
         b2.setEnabled(false);
         tf1.requestFocus();
         tf1.addCaretListener(this);
         tf1.addActionListener(this);
         b1.addActionListener(this);
         b2.addActionListener(this);
         addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {
             dispose();
             System.exit(0);
           }
         });
       }

       public void actionPerformed(ActionEvent e) {
            java.sql.Connection con= null;

           if (e.getSource()==b1 || e.getSource()==tf1) {
           try {
               con=DriverManager.getConnection("jdbc:odbc:"+tf1.getText());
              l2.setText("SUCCESS!");
              tf1.setEnabled(false);
              b1.setEnabled(false);
              b2.setEnabled(true);
           } catch(SQLException sqle) {
             l2.setText("Could not open: "+tf1.getText());
tf1.requestFocus();
tf1.setCaretPosition(0);
             return;
           }
           } else if (e.getSource()==b2) {
           try {
             con.close();
           } catch(SQLException sqle) {
           }
           con=null;
           tf1.setEnabled(true);
           b1.setEnabled(true);
           b2.setEnabled(false);
           l2.setText("");
           }

       }

       public void caretUpdate(CaretEvent e) {
         if (tf1.getText().equals(""))
           b1.setEnabled(false);
         else
           b1.setEnabled(true);
       }

       public static void main(String[] args) {
         SwingApp window = new SwingApp();
         
         try {
           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
           DriverManager.setLogStream(null);
         } catch(ClassNotFoundException cnfe) {
           System.err.println("Class not found");
           return;
         }

         window.setTitle("Java Application");
         window.pack();
         window.setVisible(true);
       }
     }
0

Featured Post

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

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

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
In this post we will learn different types of Android Layout and some basics of an Android App.
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …

726 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