Solved

How do I set the focus to a component ?

Posted on 1998-06-24
6
181 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
Salesforce Has Never Been Easier

Improve and reinforce salesforce training & adoption using WalkMe's digital adoption platform. Start saving on costly employee training by creating fast intuitive Walk-Thrus for Salesforce. Claim your Free Account Now

 
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

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!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
How to get all the API from website? 11 129
login form jsp example 2 53
Convert from a json string array to a Java object 3 65
ejb entity bean example 2 38
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
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 …
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.

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