Dar foco em um JTextField dentro de um JInternalFrame

Pessoal queria dar foco em um JTextField que está em um JInternalFrame, tentei com txtUsuario.requestFocus(); e nao deu

Tente:

txtUsuario.setFocusable(true);
txtUsuario.requestFocusInWindow();

Olá marcos, nenhum dos dois funcionaram!!!

Oi cara!!!

Velho eu estava com o mesmo problema que você!!!

Resolvi o meu desta forma.


    seuTextField.grabFocus();

Vê se consegue com este!!!

Abraços!!

Pior que nao deu will!

Posta seu codigo aqui então para vermos o que esta pegando!!

Abraços!

Esse é o codigo, está num JInternalFrame e queria que quando abrisse ele o foco estivesse no primeiro campo, txtUsuario, só nao repara a bagunça


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Mauricio de Souza
 */
public class janelaAlteraUsuario extends JInternalFrame implements ActionListener, KeyListener{

    JLabel lblid = new JLabel("ID:");
    JLabel lblUsuario = new JLabel("Usuário:");
    JLabel lblSenha = new JLabel("Nova Senha:");
    JLabel lblRepeteSenha = new JLabel("Repita a Senha:");

    JTextField txtid = new JTextField();
    JTextField txtUsuario = new JTextField();
    JPasswordField txtSenha = new JPasswordField();
    JPasswordField txtRepeteSenha = new JPasswordField();


    JButton cmdOk = new JButton("OK");
    JButton cmdSair = new JButton("Sair");



    public janelaAlteraUsuario() {

    setSize(260,220);
    setTitle(".:: Alterar Usuário e Senha ::.");
    setLayout(null);
    setDefaultCloseOperation(2);

  lblid.setBounds(87,20,30,20);
  add(lblid);

  txtid.setBounds(105,20,20,20);
  add(txtid);
  txtid.setEditable(false);

    lblUsuario.setBounds(53,50,80,20);
    add(lblUsuario);

    txtUsuario.setBounds(105,50,100,20);
    add(txtUsuario);

    lblSenha.setBounds(30,80,100,20);
    add(lblSenha);

    txtSenha.setBounds(105,80,100,20);
    add(txtSenha);

    lblRepeteSenha.setBounds(10,110,100,20);
    add(lblRepeteSenha);

    txtRepeteSenha.setBounds(105,110,100,20);
    add(txtRepeteSenha);

    cmdOk.setBounds(40,150,80,20);
    add(cmdOk);
    cmdOk.addActionListener(this);

    cmdSair.setBounds(130,150,80,20);
    add(cmdSair);
    cmdSair.addActionListener(this);






txtUsuario.setText(janelaLogaAlterarUsuario.txtUsuario.getText());
txtSenha.setText(janelaLogaAlterarUsuario.txtSenha.getText());
txtUsuario.addKeyListener(this);
txtSenha.addKeyListener(this);
txtRepeteSenha.addKeyListener(this);




try{

            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/botelho", "root", "12345");
            Statement stmt = con.createStatement();

             ResultSet rs = stmt.executeQuery("select * from usuarios where usuario='" + txtUsuario.getText() + "' and senha='" + txtSenha.getText() + "'" );

                                 if(rs.next()){
                                 String id= rs.getString("id");
                                 txtid.setText(id);
                                 
                                    
                                 }else{
                                 JOptionPane.showMessageDialog(null, "Login não encontrado!!");
                                 }
           }catch(Exception ex){
           JOptionPane.showMessageDialog(null, "Erro na comunicação com o banco de Dados","Erro",JOptionPane.ERROR_MESSAGE);
           }


    }

    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == cmdSair){
        this.dispose();
        }

         if(e.getSource() == cmdOk){


    if(txtUsuario.getText().length() != 0 && txtUsuario.getText().length() > 5 ){

                if(txtSenha.getText().length() > 5){

                    if(txtSenha.getText().equals(txtRepeteSenha.getText())){

                        try{

                            Class.forName("com.mysql.jdbc.Driver");
                            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/botelho", "root", "12345");
                            Statement stmt = con.createStatement();

                            int r = stmt.executeUpdate("update usuarios set usuario='" + txtUsuario.getText() + "', senha='" + txtSenha.getText() + "' where id='" + txtid.getText() + "'");
                                 if(r==1){
                                     JOptionPane.showMessageDialog(null, "Usuário Alterado com Sucesso!");

                                    this.dispose();

                                 }

                        }catch(Exception ex){
                        JOptionPane.showMessageDialog(null, ex.toString());

                        }
                    }else{JOptionPane.showMessageDialog(null, "Os campos SENHA e REPITA A SENHA devem ser iguais!");}
                }else{JOptionPane.showMessageDialog(null, "O campo SENHA deve ter no mínimo 6 dígitos!");}
           }else{JOptionPane.showMessageDialog(null, "O campo USUÁRIO deve ter no mínimo 6 dígitos!");}

        }

    }



    public void keyTyped(KeyEvent e) {

    }

    public void keyPressed(KeyEvent e) {

        int tecla=e.getKeyCode();

        if(tecla == KeyEvent.VK_ENTER){


    if(txtUsuario.getText().length() != 0 && txtUsuario.getText().length() > 5 ){

                if(txtSenha.getText().length() > 5){

                    if(txtSenha.getText().equals(txtRepeteSenha.getText())){

                        try{

                            Class.forName("com.mysql.jdbc.Driver");
                            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/botelho", "root", "12345");
                            Statement stmt = con.createStatement();

                            int r = stmt.executeUpdate("update usuarios set usuario='" + txtUsuario.getText() + "', senha='" + txtSenha.getText() + "' where id='" + txtid.getText() + "'");
                                 if(r==1){
                                     JOptionPane.showMessageDialog(null, "Usuário Alterado com Sucesso!");

                                    this.dispose();

                                 }

                        }catch(Exception ex){
                        JOptionPane.showMessageDialog(null, ex.toString());

                        }
                    }else{JOptionPane.showMessageDialog(null, "Os campos SENHA e REPITA A SENHA devem ser iguais!");}
                }else{JOptionPane.showMessageDialog(null, "O campo SENHA deve ter no mínimo 6 dígitos!");}
           }else{JOptionPane.showMessageDialog(null, "O campo USUÁRIO deve ter no mínimo 6 dígitos!");}

        }


        }
    

    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }}

Cara quando vc colocar o grabFocus(); não esta indo?!!


  txtUsuario.setBounds(105,50,100,20);  
  add(txtUsuario);
  txtUsuario.grabFocus();

Quando eu estava com este problema resolvi desta forma!!!

Foi isso que vc fez e não rolou?!!

abraços!!

Pior que não , não consegui de maneira alguma!

Cara Desculpe a demora!!

Então eu não sei se vc conseguiu, mas tente fazer desta forma!

 final JTextField seutextfield = seuJTextField;  
 javax.swing.SwingUtilities.invokeLater(new Runnable() {  
     public void run() {  
         seutextfield.requestFocusInWindow();  
     }  
 });

Espero que de certo agora, abraços!!!

[quote=willricardo]Cara Desculpe a demora!!

Então eu não sei se vc conseguiu, mas tente fazer desta forma!

 final JTextField seutextfield = seuJTextField;  
 javax.swing.SwingUtilities.invokeLater(new Runnable() {  
     public void run() {  
         seutextfield.requestFocusInWindow();  
     }  
 });

Espero que de certo agora, abraços!!![/quote]

É isso mesmo. Provavelmente dará certo. Isso ocorre pois o requestFocus(), antes, era chamado no construtor e ao usar o método setVisible(true) de JFrame, quem ganhava o foco era a janela. Com isso, o método requestFocus será chamado depois da janela estar pronto (por isso do invke later).

Ainda não consegui! Formatei o micro e estou instalando uma porrada de programas, até amanhã vejo se dá certo will, valeu por enquanto!