Solved

How do I set the focus to a component ?

Posted on 1998-06-24
6
175 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
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
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

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
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 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:
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…

760 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now