Solved

How do I set the focus to a component ?

Posted on 1998-06-24
6
180 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
  • 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
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

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…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
This video teaches viewers about errors in exception handling.

809 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