requestFocus() não funciona

3 respostas
peerless

Tenho um código, que quando executado.. o requestFocus não funciona, e nem eu mesmo sei pra onde vai o focus.. pois fica sem foco nenhum o JFrame, nem se eu apertar TAB ele aparece...

Código:

private void usuarioClick(KeyEvent evt) throws SQLException, Exception {
      JTusuario.setText(JTusuario.getText().replace(" ",""));
      if (evt.getKeyCode() == evt.VK_ENTER) {
        Statement stt = null;
        try {
          stt = bd.conecta_bd(banco).createStatement();
        } catch (SQLException ex) {
          ex.printStackTrace();
        } catch (Exception ex) {
          ex.printStackTrace();
        }
      if (!JTusuario.getText().trim().equals("")) {
          //não existe no bd
        if (u.setUsuario(stt, JTusuario.getText())) {
          JTusuario.setEnabled(false);
          JLsenha.setEnabled(true);
          JPsenha.setEditable(true);
          JPsenha.requestFocus();        
        }
        //se ja existe no banco
        else {
          //update
          String start_rs = "SELECT * FROM "+tabela+" where USUARIO = '"+JTusuario.getText()+"'";
          try {
            rs = st.executeQuery(start_rs);         
          } catch (SQLException ex) {
            ex.printStackTrace();
          }    
          if (rs.next()) {
          JTusuario.setText(rs.getString("usuario"));
          JTcodigo.setText(rs.getInt("codigo")+"");
          JTnome.setText(rs.getString("nome"));
          JPsenha.setText(rs.getString("senha"));
          if (rs.getInt("status") == 1)
            JCativo.setSelected(true);
          else
            JCativo.setSelected(false);
          if (rs.getInt("caixa_automatic") == 1)
            JCcaixa.setSelected(true);
          else
            JCcaixa.setSelected(false);
          if (rs.getInt("dar_desconto") == 1)
            JCdarDesconto.setSelected(true);
          else
            JCdarDesconto.setSelected(false);
          if (rs.getInt("gerente") == 1)
            JCgerente.setSelected(true);
          else
            JCgerente.setSelected(false);
          if (rs.getInt("vendedor") == 1)
            JCvendedor.setSelected(true);
          else
            JCvendedor.setSelected(false);
          if (rs.getInt("pedir_senha") == 1)
            JCsenha.setSelected(true);
          else
            JCsenha.setSelected(false);  
          
          JTusuario.setEnabled(false);
          JLnome.setEnabled(true);
          JTnome.setEditable(true);
          JLsenha.setEnabled(true);
          JPsenha.setEditable(true);
          JLcodigo.setEnabled(true);
          JCativo.setEnabled(true);
          JCgerente.setEnabled(true);
          JCcaixa.setEnabled(true);
          JCdarDesconto.setEnabled(true);
          JCvendedor.setEnabled(true);
          JCsenha.setEnabled(true);  
          
          JPsenha.setFocusable(true);
          JPsenha.requestFocus();
        }
      }

      }
      else 
        JLstatus.setText("Usuário Inválido!");
        JTusuario.requestFocus();
      }
      else
        this.trataKey(evt);
    }

3 Respostas

peerless

ah sim, no Enter de um textfield…

alguem sabe pq perde o focus?
obgd

emmanuel.silva

Cara, eu também tive um problema com isso, e vi no site da sun que tem um bug no focus, mais tem um “Work Around” para corrigir isso…

http://forum.java.sun.com/thread.jspa?threadID=448376&messageID=2038261

No seu painel ou frame, utilize esse código na inicialização para você setar o focus no seu componente:

addHierarchyListener(new HierarchyListener() {
            public void hierarchyChanged(HierarchyEvent e) {
                if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) {
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            if (isVisible()) {
                                meuComponente.requestFocus();
                            }
                        }
                    });
                }
            }
        });
emmanuel.silva

Enquanto a sua scroll Bar tente fazer assim:

SUASCROLLBAR.getVerticalScrollBar().setValue(0);
Criado 28 de fevereiro de 2007
Ultima resposta 8 de mai. de 2007
Respostas 3
Participantes 2