Solved

How do I set the focus to a component ?

Posted on 1998-06-24
6
179 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
Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

 
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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
split53 challenge 7 96
simple java question 3 55
Cipher Configuration on Apache HTTPD 4 62
Java string replace 11 44
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:

776 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